我必须阅读
等文件apple
grape
banana
并将其存储到一个字符串中,但是fgets只读取到换行符并停止,因此它只能在apple中读取。
我如何解决这个问题?或者如何将三个单词全部存储为单独的字符串?
char* readFile(const char *fileName)
{
FILE *inFile;
inFile=fopen(fileName, "r");
char **stringInFile;
stringInFile = malloc(sizeof(char*)*50);
char *data = fgets(stringInFile,50,inFile);
printf("%s", data);
fclose(inFile);
return data;
}
这完全在C btw。
答案 0 :(得分:2)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char** readFile(const char *fileName);
int main(int argc, char **argv){
char **data = readFile(argv[1]);
int i;
for(i=0; data[i] ; ++i){
puts(data[i]);
free(data[i]);
}
free(data);
return 0;
}
char** readFile(const char *fileName){
FILE *inFile;
inFile=fopen(fileName, "r");
char **stringInFile;
stringInFile = calloc(50, sizeof(char*));
char line[256];
int i = 0;
while(fgets(line, sizeof(line), inFile)){
char *p = strchr(line, '\n');
if(p)
*p = 0;
if(i < 50 - 1)
stringInFile[i++] = strdup(line);
}
fclose(inFile);
return stringInFile;
}
答案 1 :(得分:0)
fgets()
仅在每次调用时读取一个行,并将文件courser设置为下一行。如果要读取完整文件,则必须迭代它。要检查您是否在最后,可以使用feof()
检查EOF标志。
结果,对我来说工作:
char* readFile(const char *fileName)
{
FILE *inFile;
inFile=fopen(fileName, "r");
char **stringInFile;
stringInFile = malloc(sizeof(char*)*50);
while(!feof(inFile))
{
printf("%s", fgets(stringInFile,50,inFile));
}
fclose(inFile);
return stringInFile;
}
并且,您不需要变量data
- fgets()第一个参数是一个字符数组,它在哪里自动存储(例如程序中的Apple
)。