PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Strings



29-08-2000, 20:08
Hallo!

Ich habe eine Datei, in der lauter Wörter untereinanderstehen. In jeder Zeile ein Wort. Die Zeilen sind mit dem ASCII-Zeichen Nr. 10 von einander getrennt. Jetzt habe ich ein Programm geschrieben, das alle Wörter einliest:



// strings.h

#ifndef __STRINGS_H__
#define __STRINGS_H__

char *Strings [138];

extern void InitStrings();
extern char *getString(int index);

#endif

// strings.c

#include (stdio.h) //soll eine eckige Klammer darstellen
#include "strings.h"

void InitStrings()
{
FILE *file_p
char line [81]
int i;

file_p = fopen ("strings" , "r");

for (i=0; i <= 137; i++)
{
Strings[i] = fgets (line , 80 , file_p);
}

fclose (file_p);
}

char *getString(int index)
{
return Strings[index];
}

// test.c

#include (stdio.h)
#include "strings.h"

int main(void)
{
InitStrings();

puts(getString (X-Beliebige Zahl));

return;
}


Wenn ich dieses Programm jetzt starte bekomme ich immer die Hälfte (die ersten 12 Zeichen) der letzten Zeile auf dem Bildschirm angezeigt. Egal welche Zahl ich in der Datei test.c angebe. Kann mir jemand sagen. warum das so ist?
Kann mir jemand helfen?

PS .: Gibt es eine Möglichkeit unter Linux den Quelltext reinzukopieren?

[Dieser Beitrag wurde von Nicolas am 29. August 2000 editiert.]

thommy
30-08-2000, 07:18
Du liest mit fgets immer auf ein und denselben Puffer, d.h. jeder Zeiger in Deinem String verweist auf die Adresse von "line". Und da im letzten Schritt "line" mit der letzten Zeile der Datei belegt wurde, zeigt jeder Index auf deren Inhalt http://www.linuxforen.de/ubb/wink.gif

Thomas

30-08-2000, 10:11
Hallo Thomas!

Ich habe jetzt nur noch die Datei string.h inkludiert und die Zeilen:


//strings.h
char *Strings[138]

//strings.c
Strings[i] = fgets(line, 80, file_p);
in


//strings.h
char Strings[81][138]

//strings.c
strcpy(Strings[i], fgets(line, 80, file_p);
geändert!
Jetzt funktioniert es! Danke für die schnelle Hilfe!

[Dieser Beitrag wurde von Nicolas am 30. August 2000 editiert.]