ファイルを読み込んで構造体に格納するプログラムを作成しようとしています。操作などのための関数。しかし、私が試して、後の機能のためにこのファイルにアクセスすると、何も格納/バッファされていないようです。この問題は、 "void readFile"関数のようです。ここで私がこれまで持っているものです。ファイルを読み込んで構造体に格納して、他の関数全体で使用できるようにします。
サンプル入力は: メアリーは
メアリーは フリース雪のように白かった子羊を、持っていた子羊を、持っていました。
私のデバッグはこれを正しく出力しますが、最後の行が繰り返されます。
struct info{
int numOfLines;
char lines[];
}
int main (int argc, char * argv[]){
int words, sentences, syllables;
int index = 0;
struct info lines[200];
FILE* inFile = NULL;
inFile = findFile(argv[1]);
readFile(inFile,lines);
fclose(inFile);
return 0;
}
FILE* findFile(char fileName[]){
FILE* fileIn = NULL;
fileIn = fopen(fileName, "r");
while(fileIn == NULL){
printf("That file does not exist or was unable to be found, please enter another\n");
fgets(fileName,100,stdin);
fopen(fileName, "r");
}
return fileIn;
}
void readFile(FILE* toRead, struct info lines[]){
char sentence[200];
int i = 0;
while(!feof(toRead)){
fgets(sentence,300,toRead); //Would this be better than fread()?
strcpy(lines[i].lines,sentence);
printf("%s",lines[i].lines); //*This is a debug statement. The lines are read properly except the last line is printed twice. not sure why.
i++;
}
}
編集:文字列配列の代わりにポインタを使用する方が良いでしょうか?
これに加えて、lines配列の 'struct info'の最後にスペースを割り当てません。 'struct info'の配列を宣言するのではなく、' struct info * 'の配列を宣言し、構造体のサイズを超えてスペースを割り当てて、行の文字列を格納する必要があります。例えば。 'struct info * lines [200];'と 'lines [i] = malloc(sizeof(struct info)+ 100) –