[C] file in array lezen

Pagina: 1
Acties:

  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Ik ben ff de weg kwijt in C

maar ik heb een textfile
deze moet ik inlezen in een array

ik heb het volgende
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Boolean FileRead (char sFileName[])
{
 FILE *fileptr;
 char pcNumber[82]; 

      fileptr = fopen(sFileName, "r");
      if (fileptr != NULL) 
      {
            while (fgets(pcNumber,80,fileptr) != NULL) 
            {
                    
            // pcNumber in array
         }

            return TRUE; 
      }
      else
      {
            return FALSE;
      }
}

ik weet niet precies hoe ik een string in een array kan lezen, het moeten pointers worden maar ik weet niet precies hoe

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

allereerst is een string in C een array van chars

een array van strings is dus eigenlijk een array van arrays van chars, oftewel
code:
1
2
char ** stringArray1;
char * stringArray2[10];

stringArray1 is een dynamische array van pointers
stringArray2 is een array met 10 pointers

je zal dus voor elke regel een apart stukje geheugen moeten alloceren om de string in op te slaan. Bovendien moet je voor de array van pointers ook weer geheugen alloceren of van te voren definieren, maar je weet natuurlijk niet van tevoren hoeveel regels er in de file staan

vergeet niet om elk element in de array weer vrij te geven als je ermee klaar bent

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Ja ik ben er volgens mij wel uitgekomen.

Je had gelijk wat betreft die array's
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
typedef char *STRING;

Boolean FileRead (char sFileName[])
{
 FILE *fileptr;
 char pcNumber[82]; 
 int iTeller = 0;
 STRING p_String[100];
 int i;

 
      fileptr = fopen(sFileName, "r+t");
      if (fileptr != NULL) 
      {
            while (fgets(pcNumber,80,fileptr) != NULL) 
            {
                    p_String[iTeller]= new char[100];
                    strcpy(p_String[iTeller], pcNumber);
                    iTeller++;
                }

              for ( i = 0; i < iTeller ; i++)
                {
                    printf ("%s\n", p_String[i]);
                }

            return TRUE; 
      }
      else
      {
            return FALSE;
      }
}

Dit heb ik dan maar voor de oplossing, Ik moet alleen nog ombouwen om dynamische geheugenallocatie toe te passen

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

het is natuurlijk zonde om elke keer 100 characters te alloceren

misschien is het handiger om strlen (pcNumber) + 1 chars te alloceren, zodat je het geheugengebruik minimaal houdt

overigens moet je het aantal ingelezen regels ook even bijhouden, anders heb je binnen de kortste keren een buffer-overflow :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op dinsdag 05 februari 2002 01:09 schreef OiSyN het volgende:
het is natuurlijk zonde om elke keer 100 characters te alloceren

misschien is het handiger om strlen (pcNumber) + 1 chars te alloceren, zodat je het geheugengebruik minimaal houdt

overigens moet je het aantal ingelezen regels ook even bijhouden, anders heb je binnen de kortste keren een buffer-overflow :)
Schrijf gewoon een dynamische grow-on-demand stringbuffer?

Ennuh lieve papa OiSyN, waarom heb je die jongen er nog niet op gewezen dat de volgende regel *ECHT* niet werkt in een C-programma:
code:
1
p_String[iTeller]= new char[100];

;)

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

ja ik zat er ook naar te kijken, zoon, maar ik wilde niet gaan mierenneuken :)
Bovendien kun je tegenwoordig niet meer van de mensen verwachten dat als ze C zeggen dat ze dan ook daadwerkelijk C bedoelen en niet stiekum toch C++ (of andersom) :{ :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op dinsdag 05 februari 2002 14:05 schreef OiSyN het volgende:
ja ik zat er ook naar te kijken, zoon, maar ik wilde niet gaan mierenneuken :)
Bovendien kun je tegenwoordig niet meer van de mensen verwachten dat als ze C zeggen dat ze dan ook daadwerkelijk C bedoelen en niet stiekum toch C++ (of andersom) :{ :)
Tja ik doe ook nooit moeilijk als mensen in C++ de C-libs gaan gebruiken en zo, maar om in een C topic en een duidelijk stuk C-code dan vervolgens EEN C++-operator te gebruiken ging me te ver, dat hoort gewoon niet te compilen :7

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

true, so true

dominion99: maak van die new char[100] dus maar een (char *)malloc (100) 8-)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1