我编写了下面的程序,以便读取文件的每一行,然后将每一行存储在一个char指针数组中供以后使用(比如只排序指针而不是真正的字符串)。 但问题是它一直存储相同的行。
假设该文件名为 file.txt ,并且有两(2)行文本。
first sentence
second sentence
我写的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
int main(){
FILE *cf;
cf = fopen("file.txt", "r");
char line[101];
char *lines[2];
char *eof;
int i=0;
while((eof = fgets(line, 101, cf)) != NULL){
lines[i] = eof;
i++;
}
printf("%s\n", lines[0]);
printf("%s\n", lines[1]);
system("pause");
return 0;
}
我得到的输出是:
second sentence
second sentence
但我想得到:
first sentence
second sentence
我在这里做错了什么?
- 感谢您的帮助: - )
答案 0 :(得分:2)
函数fgets
不会分配新内存。因此,如果成功eof == line
- 那是正确的,它会返回您传递的内容。你每次都要覆盖它。
尝试:
while((eof = fgets(line, 101, cf)) != NULL){
lines[i] = strdup(eof);
i++;
}
当然,您必须记得free(lines[i])
。
答案 1 :(得分:0)
您应该使用getline(3)
,例如
char* myline = NULL;
size_t mylinesize = 0;
ssize_t mylinelen = 0;
while ((mylinelen = getline(&myline, &mylinesize, cf)) >= 0) {
lines[i++] = strdup(myline);
}
free (myline);
myline = NULL;
您应该考虑使用readline(3)和GNU readline库(GPL许可)进行交互式使用。
答案 2 :(得分:0)
eof = fgets(line, 101, cf)
while(eof!=NULL)
{
puts(eof);
eof=fgets(line,101,cf);
free(eof);
}