检查String是否包含换行符

时间:2015-02-10 10:41:46

标签: c string fgets character-arrays

我正在使用fgets()为字符数组添加缓冲区,因为我逐行处理文件。如果遇到新行,缓冲区数组是否会在其最后位置包含字符'\n'

当文件开始换行时,fgets()是否将'\n'存储在缓冲区中?如果没有,我该如何检查它们?

4 个答案:

答案 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';