fgets
将换行符留在字符串的末尾,如果之后添加以下行,您可以清楚地看到:
printf ("[%s]\n", temp);
你会看到类似的东西:
[file1
]
您需要在使用前将其删除,您可以通过以下方式执行此操作:
size_t sz = strlen (temp);
if (sz > 0)
if (temp[sz-1] == '\n')
temp[sz-1] = '\0';
您可以在以下完整程序中看到这种效果:
#include <stdio.h>
#include <string.h>
int main (void) {
size_t sz;
char temp[30];
printf ("\n> ");
while (fgets (temp, sizeof(temp), stdin) != NULL) {
printf ("before: [%s]\n", temp);
sz = strlen (temp);
if (sz > 0) {
if (temp[sz-1] == '\n') {
temp[sz-1] = '\0';
}
}
printf ("after : [%s]\n", temp);
printf ("\n> ");
}
return 0;
}
它基本上使用您的确切方法使用fgets
(但来自标准输入)获取一行,然后在删除尾随换行符之前和之后输出结果。示例运行如下:
pax> ./testprog
> hello
before: [hello
]
after : [hello]
> goodbye
before: [goodbye
]
after : [goodbye]
> [CTRL-D]
pax> _
您可能还想查看该代码段中的其他一些内容:
- 在循环
{
结束时使用开括号。while
- 您在循环中打开文件而不对它们做任何事情(包括关闭它们)的事实。
- 使用
"rb"
开放模式。通常这是不必要的,如果您知道它是文本文件,那肯定是不必要的。
- 在使用它们之前,您应该始终检查可能失败的函数(如 )的返回码。
fopen
main
C 中不需要参数的规范形式是int main (void)
.