c - 从 fgets() 输入中删除尾随换行符

标签 c string gcc newline fgets

我正在尝试从用户那里获取一些数据并将其发送到 gcc 中的另一个函数。代码是这样的。

printf("Enter your Name: ");
if (!(fgets(Name, sizeof Name, stdin) != NULL)) {
    fprintf(stderr, "Error reading Name.\n");
    exit(1);
}

但是,我发现它最后有一个换行符\n。因此,如果我输入 John,它最终会发送 John\n。如何删除 \n 并发送正确的字符串。

最佳答案

也许最简单的解决方案是使用我最喜欢的鲜为人知的函数之一,strcspn() :

buffer[strcspn(buffer, "\n")] = 0;

如果您希望它也处理 '\r'(例如,如果流是二进制的):

buffer[strcspn(buffer, "\r\n")] = 0; // works for LF, CR, CRLF, LFCR, ...

该函数计算字符数,直到它遇到 '\r''\n'(换句话说,它找到第一个 '\r''\n')。如果它没有命中任何东西,它会在 '\0' 处停止(返回字符串的长度)。

请注意,即使没有换行符也能正常工作,因为 strcspn'\0' 处停止。在这种情况下,整行只是将 '\0' 替换为 '\0'

关于c - 从 fgets() 输入中删除尾随换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47682073/

相关文章:

c - 如何使用蜂窝设备在 Zephyr OS 上实现 MQTT?

C:按降序对 vector 元素进行排序

c++ - 为什么在构建 std::string 时会出现 R6030 错误?

c - OS X 上的 Gcc : Undefined symbols for architecture x86_64

python - 将 python 库绑定(bind)到 C

c - 通过 tre 库使用近似匹配查找多个正则表达式命中

python - 在 O(n) 中合并和排序 n 个字符串

c - "strlen(s1) - strlen(s2)"永远不会小于零

c - 包装 setjmp 和 longjmp 有什么奇怪的地方?

gcc - MingW GCC 抱歉,未实现 : 64-bit mode not compiled in #include <jni. h>