我尝试使用以下,以从文件中读取一行检测EOL用C ...使用与fgets
while(fgets(c,BUF,f) != EOL){
puts(c);
}
其中EOL = #define EOL '\n'
但是,我得到的警告...... comparison between pointer and integer
什么是正确的方式来实现我想要的?
我尝试使用以下,以从文件中读取一行检测EOL用C ...使用与fgets
while(fgets(c,BUF,f) != EOL){
puts(c);
}
其中EOL = #define EOL '\n'
但是,我得到的警告...... comparison between pointer and integer
什么是正确的方式来实现我想要的?
与fgets读取一个字符串,则结果类型为char*
我想您所想的fgetc
呢?
您需要取消引用返回的char*
并将其与您的EOL
进行比较...不会将实际指针地址本身与行尾字符进行比较。
你的代码改成这样:
char* return_val = NULL;
while((return_val = fgets(c,BUF,f)) != NULL && *return_val != EOF)
{
puts(c);
}
if (retun_val == NULL)
{
//handle error
}
你必须调用fgets
后检查的c
内容,以确定是否换行被包含在返回的字符串:
for (;;) { if (fgets(c, BUF, f) == NULL) { /* handle error */ } if (strchr(c, EOL) != NULL) { puts(c); } else {break; } }
fgets
从流中读取字符并将它们写入缓冲区,直到缓冲区几乎已满或发现'\n'
(如果操作失败,则返回NULL)。
这样你就可以知道有多少characeters被读取(包括'\n'
)与strlen
...
ret = fgets(buffer, sizeof buffer, stdin);
if (ret == NULL) /* deal with error */;
chars = strlen(buffer);
现在,两件事情之一可能已经hapenned:无论是'\n'
读取之前缓冲区满了或在读取'\n'
之前缓冲区已满。你可以知道这是它在缓冲区检查的最后一个字符
if (buffer[chars - 1] == '\n') /* full line read */;
else /* incomplete line */;
注意chars
总是(*)1以上,所以表达buffer[chars - 1]
是确定的。 (*)它只能使用二进制数据输入0,但会拒绝使用strlen
和其他字符串函数。