我正在使用fgets()
为字符数组添加缓冲区,因为我逐行处理文件。如果遇到新行,缓冲区数组是否会在其最后位置包含字符'\n'
?
当文件开始换行时,fgets()
是否将'\n'
存储在缓冲区中?如果没有,我该如何检查它们?
答案 0 :(得分:3)
是。 fgets()
扫描并将尾随\n
存储在目标缓冲区中(如果源中存在)。
引用手册页,
在EOF或换行符后停止阅读。如果读取换行符,则将其存储到缓冲区中。
所以,回答你的问题
当文件启动换行符时,检查String是否包含换行符[...]
你可以做到,
strchr()
与\n
一起检查输入行是否包含\n
buffer[0] == '\n'
的起始字节[文件开始新行情况]。答案 1 :(得分:1)
是fgets()
确实会读取'\n'
字符(如果存在),要删除它就可以执行此操作
char buffer[SIZE_OF_BUFFER];
size_t length;
/* * we assume that file is a valid 'FILE *' instance */
length = sizeof(buffer);
if (fgets(buffer, length, file) != NULL)
{
length = strlen(buffer);
if (buffer[length - 1] == '\n')
buffer[--length] = '\0';
}
这样做是检查字符串末尾是否存在'\n'
,然后用nul
终结符替换它。
答案 2 :(得分:0)
char a[100];
size_t n;
fgets(a, sizeof(a),stdin);
n = strlen(a);
if (n > 0 && a[n - 1] == '\n')
a[n-1] = '\0';
您可以检查缓冲区中是否有换行符,如上所示,并通过将换行符替换为\0
答案 3 :(得分:0)
是的。如果它遇到它,它会在行尾添加'\n'
。
如果你想摆脱它,比较数组索引并使用以下内容根据需要替换它。 (根据您的需要更改'\0'
)
if (arrayname[index] == '\n')
arrayname[index]='\0';