C 从文件中读取行不返回所有
我试图将文件中的单词保存到数组中,但我只读取前8个单词 下面是我的代码C 从文件中读取行不返回所有,c,fopen,readfile,fgets,C,Fopen,Readfile,Fgets,我试图将文件中的单词保存到数组中,但我只读取前8个单词 下面是我的代码 #define BUF 128 /* can change the buffer size as well */ char ** readFileContentArray(char* filename){ int lines = 128; char ** strLines = (char **)malloc(sizeof(char*)*lines); FILE *plist = NULL;
#define BUF 128 /* can change the buffer size as well */
char ** readFileContentArray(char* filename){
int lines = 128;
char ** strLines = (char **)malloc(sizeof(char*)*lines);
FILE *plist = NULL;
int i = 0;
char line[4];
plist = fopen(filename, "r");
while(fgets(line, BUF, plist)) {
if(i >= lines){
strLines = (char **)realloc(strLines, (lines*2) * sizeof(char *));
lines = lines*2;
}
strLines[i] = strdup(line);
i++;
}
return strLines;
}
我正在阅读的文件的格式如下:
aaaa
bbbb
中交所
dddd
eeee
ffff
gggg
啊
三
jjjj
您的代码有几个问题
fopen
是否成功。这可以通过检查其返回值来实现fopen
失败时返回NULL
fgets
将128个字符写入行
,该行最多可容纳4个字符#define BUF 128 /* Change to max size of a line */
char ** readFileContentArray(char* filename){
int lines = 128;
char ** strLines = malloc(sizeof(char*) * lines);
if(strLines == NULL) //If malloc failed
return NULL;
FILE *plist = NULL;
int i = 0;
char line[BUF]; //Allocate BUF size
if((plist = fopen(filename, "r")) == NULL) //If fopen failed
return NULL;
while(fgets(line, BUF, plist)) {
if(i >= lines){
char* temp;
if((temp = realloc(strLines, (lines*2) * sizeof(char *))) == NULL) //If realloc failed
{
free(strLines);
return NULL;
]
lines = lines*2;
}
strLines[i] = strdup(line);
i++;
}
fclose(plist); //Close file after its use
return realloc(strLines, i * sizeof(char*)); //Return correct size
}
您的代码有几个问题
fopen
是否成功。这可以通过检查其返回值来实现fopen
失败时返回NULL
fgets
将128个字符写入行
,该行最多可容纳4个字符#define BUF 128 /* Change to max size of a line */
char ** readFileContentArray(char* filename){
int lines = 128;
char ** strLines = malloc(sizeof(char*) * lines);
if(strLines == NULL) //If malloc failed
return NULL;
FILE *plist = NULL;
int i = 0;
char line[BUF]; //Allocate BUF size
if((plist = fopen(filename, "r")) == NULL) //If fopen failed
return NULL;
while(fgets(line, BUF, plist)) {
if(i >= lines){
char* temp;
if((temp = realloc(strLines, (lines*2) * sizeof(char *))) == NULL) //If realloc failed
{
free(strLines);
return NULL;
]
lines = lines*2;
}
strLines[i] = strdup(line);
i++;
}
fclose(plist); //Close file after its use
return realloc(strLines, i * sizeof(char*)); //Return correct size
}
您可以将指针传递给两个整数,这样调用者就可以知道数组中分配了多少项。
调用为
char**strArray=readFileContentArray(“file.txt”、&total、&used)代码>
结果可以打印为
for ( i = 0; i < used; i++) {
printf ( "%s", strArray[i]);
}
您可以将指针传递给两个整数,这样调用者就可以知道数组中分配了多少项。
调用为char**strArray=readFileContentArray(“file.txt”、&total、&used)代码>
结果可以打印为
for ( i = 0; i < used; i++) {
printf ( "%s", strArray[i]);
}
1) fgets(行、BUF、plist)
--您允许fgets
在行中最多存储128个字符,该行只能容纳4个字符2)您不检查fopen
3)不在调用4个字符的文件内容字时强制转换calloc
malloc
realloc
的结果,请尝试,但是,在调用中,我总是返回8个单词,使用数组的大小:<代码> fGET(行,sieof of Line,PLIST)。如果在您的(例如POSIX)系统上可用,则应该考虑使用。“<代码> FGET(行,BUF,PLIST)< /代码>”--您允许fgets
在行中最多存储128个字符,该行只能容纳4个字符2)您不检查fopen
3)不在调用4个字符的文件内容字时强制转换calloc
malloc
realloc
的结果,请尝试,但是我总是在调用中使用数组的大小返回8个词:<代码> fGET(行,sieof of Line,PLIST)。如果在您的(例如POSIX)系统上可用,您应该考虑使用。抱歉,也许我解释得不好。我的数组只存储了8行,但该文件包含更多行(大约200.000行)。我尝试了你的代码,但只能存储前八个。非常感谢你的帮助,但不幸的是仍然不能working@jlopez“不工作”是一个糟糕的解释。怎么不起作用了?我是说,那只省了8块钱words@jlopez,我无法复制。考虑一下道歉,也许我没有解释清楚。我的数组只存储了8行,但该文件包含更多行(大约200.000行)。我尝试了你的代码,但只能存储前八个。非常感谢你的帮助,但不幸的是仍然不能working@jlopez“不工作”是一个糟糕的解释。怎么不起作用了?我是说,那只省了8块钱words@jlopez,我无法复制。考虑张贴