C中带有空格的字符串被截断

时间:2016-09-15 19:52:40

标签: c arrays string variables spaces

我想创建一个固定长度的空字符串,让我们说100,然后输入该字符串的用户输入,由于某种原因,当我尝试扫描字符串时,代码不会在用户输入后向我显示所有前导空格。 如果我的空字符串长度为20且输入为5个字符,则计数应为20。我在这里遗漏了一些非常基本的东西,或者编译器截断空的空格无论如何?

int main () 
{
int count=0;
   char word[20];
   printf("Please enter a sting: ");
   scanf("%s", word);

   while (word[count]!= '\0' )
       {
       printf  ("%c",word[count]) ;
       count++;
       }
   printf ("\nCharacter count :%i\n", count);

}  

输出结果为:

Please enter a sting: Words
Words
Character count :5

Press any key to continue.

1 个答案:

答案 0 :(得分:1)

通常scanf("%s", word);读取但不保存前导空格,然后将非空白字符保存到word。然后它附加一个空字符并返回。

要阅读用户输入的,包括空格字符,请使用fgets()。这通常包括 Enter '\n'

 char word[20]; // Or maybe 100
 if (fgets(word, sizeof word, stdin)) {

   while (word[count]!= '\0') {
     printf("%c", word[count]);
     count++;
   }
   printf ("\nCharacter count :%i\n", count);
 }
  

如果我的空字符串长度为20且输入为5个字符,则计数应为20。

计数将反映最多输入 20 - 1或19的字符数。