C 使用fgets读取文件

C 使用fgets读取文件,c,C,一个小问题,谢谢你的帮助: 文件的第一行是: “添加” 下面有更多的线条 我正在使用fgets读取文件的第一行: char str [500]; fgets(str,sizeof(str),filePointer); 由于fgets在换行符处停止,因此我将不需要的换行符替换为“\0”: char *p; if ((p = strchr(str, '\n')) != NULL) *p = '\0'; 现在,如果我以这种方式打印str: printf("DEBUG: str:=[%s]\n"

一个小问题,谢谢你的帮助:

文件的第一行是:
“添加”
下面有更多的线条

我正在使用fgets读取文件的第一行:

char str [500];
fgets(str,sizeof(str),filePointer);
由于fgets在换行符处停止,因此我将不需要的换行符替换为“\0”:

char *p;
if ((p = strchr(str, '\n')) != NULL)
  *p = '\0';
现在,如果我以这种方式打印str:

printf("DEBUG: str:=[%s]\n",str);
为什么我会得到这样糟糕的输出:

]EBUG: str:=[add A
而不是:

DEBUG: str:=[add A]
??

谢谢

您的文件可能使用了
\r\n
行结束符(也称为.Windows行结束符),因此您在中留下了一个尾随
\r


同时杀死
\r
,你应该这样做。

查看调试器中的
str
。您将看到一些有趣的内容。或者使用
hextump
查看十六进制输出。或者看看你的十六进制输入。哦,比尔·盖茨臭名昭著的马车返回…?是我还是微软喜欢把东西弄得怪异而难以忍受?e、 g.回车、windows 8、windows资源管理器…@Israel windows使用\r\n是出于技术原因。在DOS时代,有不同的标准/惯例。MS-DOS使用CR-LF约定,这是打印机使用的标准。因此,windows使用换行符\r\n来向后兼容DOS。@CCInc从未想过为什么要使用它(自DOS以来)。老式打印机。。。这很有道理。感谢这段宝贵的历史。@CCInc是的,但这些年他们有没有理由不放弃这一功能?我的windows 8添加了这个字符。@嗯,它现在几乎是windows使用的标准\r\n。这将造成与现有程序的兼容性问题。