检查字符串是否包含换行符

Check if String Contains New Line character

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

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

是的。 fgets() 扫描尾部 \n 并将其存储在目标缓冲区中(如果源缓冲区中存在的话)。

引用手册页,

Reading stops after an EOF or a newline. If a newline is read, it is stored into the buffer.

所以,回答您的问题

Check if String Contains New Line character [...] when a file starts a newline

你也可以

  • strchr()\n 检查输入行是否包含 \n anywhere
  • 仅检查 buffer[0] == '\n' 的起始字节 [文件开始一个新行 大小写]。

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] = '[=10=]';
}

它的作用是检查 '\n' 是否出现在字符串的末尾,然后用 nul 终止符替换它。

char a[100];
size_t n;

fgets(a, sizeof(a),stdin);

n = strlen(a);
if (n > 0 && a[n - 1] == '\n')
    a[n-1] = '[=10=]';

您可以检查缓冲区中是否有换行符,如上所示,并通过将换行符替换为 [=11=]

来抑制它

是的。如果遇到它,它会在行尾添加 '\n' 。 如果您想摆脱它,请比较数组索引并使用以下方法根据需要替换它。 (根据需要更改 '[=12=]'

if (arrayname[index] == '\n')
    arrayname[index]='[=10=]';