如何在不使用fgets包含换行符的情况下从输入中获取字符串?

cou*_*sto 11 c stdin newline fgets

我正在尝试在其他地方写一个输入的字符串,并且不知道如何取消作为此字符串的一部分出现的新行,我用stdin和fgets获取.

 char buffer[100];
 memset(buffer, 0, 100);
 fgets(buffer, 100, stdin);
 printf("buffer is: %s\n stop",buffer);
Run Code Online (Sandbox Code Playgroud)

我试图限制fgets获取的数据量,并限制写入多少数据,但新行仍然存在.我怎样才能简单地将输入的字符串放到最后写的字符中?

mad*_*adz 5

尝试

fgets(buffer, 100, stdin);
size_t ln = strlen(buffer)-1;
if (buffer[ln] == '\n')
    buffer[ln] = '\0';
Run Code Online (Sandbox Code Playgroud)


chu*_*ica 5

只需寻找潜力即可'\n'

调用后fgets(),如果'\n'存在,它将是char字符串中的最后一个(就在 之前'\0')。

size_t len = strlen(buffer);
if (len > 0 && buffer[len-1] == '\n') {
  buffer[--len] = '\0';
}
Run Code Online (Sandbox Code Playgroud)

使用示例

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);
Run Code Online (Sandbox Code Playgroud)

笔记:

buffer[strlen(buffer)-1]当第一个是char(嵌入的空字符)时,在极少数情况下是危险的。buffer'\0'

scanf("%99[^\n]%*c", buffer);char如果第一个是问题'\n',则不会读取任何内容并'\n'保留在 中stdin

strlen()与其他方法相比速度更快:https ://codereview.stackexchange.com/a/67756/29485

或者滚动你自己的代码,例如gets_sz