【问题标题】:How to get a string input from stdin that has leading white space in C?如何从标准输入中获取在 C 中具有前导空格的字符串输入?
【发布时间】:2020-06-01 15:35:15
【问题描述】:

需要一个解决方案来让输入字符串以空格开头?

我知道一种在输入中包含空格的方法

scanf("%[^\n]s", s);

但它仅适用于单词之间的空格。 我需要一个以空格开头的字符串的解决方案。 而且我还需要变量中的起始空格

【问题讨论】:

  • 请问为什么要在字符串中包含前导空格?
  • @RobertSsupportsMonicaCellio 其实是为了在线评委的问题解决。
  • @user3121023 scanf("%[^\n]", s); 起始空间被忽略。 ://
  • @AzizAhmed scanf("%[^\n]", s); 确实忽略起始空间。相反,使用先前的scanf("%[^\n]", s);'\n' 留在stdinscanf("%[^\n]", s); 由于'\n' 而退出。拯救自己的悲伤。在你知道它为什么不好之前不要使用scanf()

标签: c string input whitespace stdin


【解决方案1】:

要获得的用户输入,请使用fgets()

#define S_MAX_LENGTH
char s[S_MAX_LENGTH + 2];
if (fgets(s, sizeof s, stdin)) {
  s[strcspn(s, "\n")] = '\0'; // Should code want to lop off a potential trailing \n
  ....

请勿使用scanf("%[^\n]s", s);gets(s);。他们遭受缓冲区溢出和其他问题。

【讨论】:

  • 此外,"%[^\n]s" 中的尾随 s 不正确。
猜你喜欢
  • 1970-01-01
  • 2019-09-17
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 2018-01-24
  • 1970-01-01
  • 2023-01-29
相关资源
最近更新 更多