我将文本读入缓冲区后如何逐行读取?

Fei*_*Xue 5 c fread

首先,我通过调用fread将文本读入缓冲区,然后我想逐行读取它,怎么做?我尝试使用sscanf,但它似乎不起作用.

char textbuf[4096];
char line[256];
FILE *fp;
fp = fopen(argv[1],"r");
memset(textbuf, 0, 4096);
fread(textbuf, 1, 4096, fp);
Run Code Online (Sandbox Code Playgroud)

我知道使用fgets是一个好方法.我只是想知道天气这种方法可以做同样的事情.

Jac*_*ack 9

试试这个:

fgets(textbuf, sizeof(textbuf), fp);
Run Code Online (Sandbox Code Playgroud)

对于逐行读取,您可以使用:fgets(line, 128, fp)getline(&line, &size, fp);

编辑

如果要从变量中读取它,请查看strtok()函数:

char * line = strtok(strdup(buffer), "\n");
while(line) {
   printf("%s", line);
   line  = strtok(NULL, "\n");
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*iss 7

您可以使用strchr()找到行尾字符的位置,如下所示:

char *eol = strchr(line, '\n');
Run Code Online (Sandbox Code Playgroud)

之前*eol的一切都是第一线.然后,从提前lineeol + 1,删除任何后续\r\n字符,然后重复这个过程,直到strchr()返回NULL指示没有更多的换行符.此时,将任何剩余数据移动到缓冲区的开头,并从文件中读取下一个块.

如果您担心效率,可以避免使用2个缓冲区并在它们之间交替移动数据,但即使是天真的方法也可能比fgets()文件有很多行更快.