7

我想逐行读取文件中的行,但这对我不起作用。

这是我试图做的:

FILE *file;
char *line = NULL;
int len = 0;
char read;
file=fopen(argv[1], "r");

if (file == NULL)
    return 1;

while ((read = getline(&line, len, file)) != -1) {
    printf("Retrieved line of length %s :\n", &read);
    printf("%s", line);
}

if (line)
    free(line);

return 0;

任何建议为什么这不起作用?

4

3 回答 3

5

为了让它正常工作,有一些变化。

更改int lensize_t len正确的类型。

getline()语法不正确。它应该是:

while ((read = getline(&line, &len, file)) != -1) {

并且该printf行也应该被修改,以打印返回的数字而不是char字符串解释:

printf("Retrieved line of length %d:\n", read);
于 2013-11-06T14:06:51.290 回答
4

或者,您也可以使用此代码。它将逐行读取整个文件并打印这些行。

char buf[1000];

ptr_file =fopen("input3.txt","r");
if (!ptr_file)
    return 1;

while (fgets(buf,1000, ptr_file)!=NULL)
    printf("%s",buf);
于 2015-04-01T17:21:39.983 回答
3

你的第二个论点getline()是(非常)错误的。

应该是size_t *,你过去了int。您应该已经收到有关此问题的编译器警告。

做了:

size_t len;

并在通话中:

getline(&line, &len, file)

返回值也是类型ssize_t,不是char

在编写代码以使用该功能之前,您应该真正阅读手册页getline()并确保您理解它。

于 2013-11-06T13:57:15.183 回答