Так что я пытаюсь написать программу, которая будет читать файл и хранить в структуре, чтобы впоследствии она могла быть передана другим функции для манипуляции и многое другое. Однако, когда я пытаюсь получить доступ к этому файлу для последующих функций, кажется, что ничего не было сохранено/буферизовано. Проблема, похоже, связана с функцией «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++;
}
}
Edit: оглядываясь на него сейчас, бы это было лучше использовать указатели для этого вместо массива строк?
В дополнение к этому в конце 'struct info' отсутствует пространство, выделенное для массива строк. Вместо объявления массива 'struct info', он должен объявить массив' struct info * 'и выделить пространство за пределами размера структуры для размещения строки. Например. 'struct info * lines [200];' и 'lines [i] = malloc (sizeof (struct info) + 100' –