我正在尝试从用户那里获取一些数据,并将其发送到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
并发送正确字符串。
发布于 2010-04-23 03:26:53
优雅的方式:
Name[strcspn(Name, "\n")] = 0;
略显丑陋的方式:
char *pos;
if ((pos=strchr(Name, '\n')) != NULL)
*pos = '\0';
else
/* input too long for buffer, flag error */
稍微有点奇怪的方式:
strtok(Name, "\n");
请注意,如果用户输入空字符串(即只按Enter键),则strtok
函数不会按预期工作。它保持\n
字符不变。
当然,还有其他的。
发布于 2015-02-12 02:54:57
也许最简单的解决方案使用了我最喜欢的一个鲜为人知的函数,即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'
。
发布于 2010-04-23 03:26:56
size_t ln = strlen(name) - 1;
if (*name && name[ln] == '\n')
name[ln] = '\0';
https://stackoverflow.com/questions/2693776
复制相似问题