我正在尝试在其他地方写一个输入的字符串,并且不知道如何取消作为此字符串的一部分出现的新行,我用stdin和fgets获取。
char buffer[100];
memset(buffer, 0, 100);
fgets(buffer, 100, stdin);
printf("buffer is: %s\n stop",buffer);
我试图限制fgets获取的数据量,并限制写入多少数据,但新行仍然存在。我怎样才能简单地将输入的字符串放到最后写的字符中?
答案 0 :(得分:4)
试
fgets(buffer, 100, stdin);
size_t ln = strlen(buffer)-1;
if (buffer[ln] == '\n')
buffer[ln] = '\0';
答案 1 :(得分:4)
只需寻找潜在的'\n'
。
调用fgets()
后,如果'\n'
存在,则它将是字符串中的最后一个char
(就在'\0'
之前)。
size_t len = strlen(buffer);
if (len > 0 && buffer[len-1] == '\n') {
buffer[--len] = '\0';
}
样本用法
char buffer[100];
// memset(buffer, 0, 100); not needed
if (fgets(buffer, sizeof buffer, stdin) == NULL) { // good to test fgets() result
Handle_EOForIOerror();
}
size_t len = strlen(buffer);
if (len > 0 && buffer[len-1] == '\n') {
buffer[--len] = '\0';
}
printf("buffer is: %s\n stop",buffer);
注意:
在buffer[strlen(buffer)-1]
中char
中的第一个buffer
是'\0'
(嵌入的空字符)时, scanf("%99[^\n]%*c", buffer);
很危险。
char
为'\n'
,则无法读取任何内容,而'\n'
仍保留在stdin
中,则 strlen()
会出现问题。
{{1}}速度很快:https://codereview.stackexchange.com/a/67756/29485
或者滚动您自己的代码,例如gets_sz