如何使用scanf允许输入空格?

179
```python print("Hello, World!") ```

使用下面的代码:


```python print("Hello, World!") ```
char *name = malloc(sizeof(char) + 256); 

printf("What is your name? ");
scanf("%s", name);

printf("Hello %s. Nice to meet you.\n", name);

用户可以输入他们的名字,但当他们输入一个带空格的名字,比如Lucas Aardvarkscanf()只会截取Lucas后面的所有内容。我该如何让scanf()允许空格?


11
注意,更符合惯用语的写法是'malloc(sizeof(char) * 256 + 1)',或者'malloc(256 + 1)',甚至更好的方式(假设'name'只在局部使用)是'char name[256+1]'。'+1'可以作为空终止符的记忆方法,需要包含在分配内存中。 - Barry Kelly
@Barry - 我怀疑 sizeof(char) + 256 是一个笔误。 - Chris Lutz
11个回答

-2
/*reading string which contains spaces*/
#include<stdio.h>
int main()
{
   char *c,*p;
   scanf("%[^\n]s",c);
   p=c;                /*since after reading then pointer points to another 
                       location iam using a second pointer to store the base 
                       address*/ 
   printf("%s",p);
   return 0;
 }

6
你能解释一下为什么这是正确的答案吗?请不要只贴代码作为答案。 - Theo
1
扫描集后面不应该有s - Antti Haapala -- Слава Україні
1
c 没有初始化。在成功扫描的情况下,它会将扫描到的值写入不可预测且不合法访问的内存中。从那个流氓指针的副本中打印不会有任何帮助。如果你已经"成功"测试过了,那么你的结果是非常幸运的,因为这种未定义行为的结果很难说清楚。无论是否解释,这段代码都不是任何问题的答案。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接