使用fgets检测C中的下线
我正在尝试使用以下命令从文件中读取一行使用fgets检测C中的下线,c,file-io,C,File Io,我正在尝试使用以下命令从文件中读取一行 while(fgets(c,BUF,f) != EOL){ puts(c); } 其中EOL=define EOL'\n'然而,我得到了警告。。。指针与整数的比较 实现我所尝试的正确方法是什么?fgets读取字符串,结果类型为char* 我想您应该考虑的是fgetc?fgets读取一个字符串,结果类型是char* 我认为您应该考虑fgetc?您需要取消对返回字符*的引用,并将其与您的EOL进行比较。。。不将实际指针地址本身与行尾字符进行比较 将
while(fgets(c,BUF,f) != EOL){
puts(c);
}
其中EOL=define EOL'\n'然而,我得到了警告。。。指针与整数的比较
实现我所尝试的正确方法是什么?fgets读取字符串,结果类型为char*
我想您应该考虑的是fgetc?fgets读取一个字符串,结果类型是char*
我认为您应该考虑fgetc?您需要取消对返回字符*的引用,并将其与您的EOL进行比较。。。不将实际指针地址本身与行尾字符进行比较 将代码更改为:
char* return_val = NULL;
while((return_val = fgets(c,BUF,f)) != NULL && *return_val != EOF)
{
puts(c);
}
if (retun_val == NULL)
{
//handle error
}
您需要取消引用返回的字符*并将其与您的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后,必须检查c的内容,以确定返回的字符串中是否包含换行符: for (;;) { if (fgets(c, BUF, f) == NULL) { /* handle error */ } if (strchr(c, EOL) != NULL) { puts(c); } else {break; } } fgets从流中读取字符并将其写入缓冲区,直到缓冲区几乎满或找到“\n”,如果操作失败,则返回NULL 因此,您可以知道读取了多少个字符,包括带有strlen的“\n” 现在,可能出现了两种情况之一:要么在缓冲区满之前读取了“\n”,要么在读取“\n”之前缓冲区已满。通过检查缓冲区中的最后一个字符,可以知道是哪个字符
if (buffer[chars - 1] == '\n') /* full line read */;
else /* incomplete line */;
注意,chars总是*1或更多,因此表达式缓冲区[chars-1]是正常的
*它可以是0,只能输入二进制数据,但这会拒绝使用strlen和其他字符串函数。fgets从流中读取字符并将其写入缓冲区,直到缓冲区几乎满了或找到“\n”为止。如果操作失败,它将返回NULL
因此,您可以知道读取了多少个字符,包括带有strlen的“\n”
现在,可能出现了两种情况之一:要么在缓冲区满之前读取了“\n”,要么在读取“\n”之前缓冲区已满。通过检查缓冲区中的最后一个字符,可以知道是哪个字符
if (buffer[chars - 1] == '\n') /* full line read */;
else /* incomplete line */;
注意,chars总是*1或更多,因此表达式缓冲区[chars-1]是正常的
*它可以是0,只能输入二进制数据,但这会拒绝使用strlen和其他字符串函数。为什么不试试fgetc呢?然后您可以像这样比较“/n”的ASCII代码
while (fgetc (file) != '\n'){
puts(c);
}
你为什么不试试fgetc呢?然后您可以像这样比较“/n”的ASCII代码
while (fgetc (file) != '\n'){
puts(c);
}