从输入中读取带空格的字符串?

112

我使用Ubuntu,我的IDE是Geany和CodeBlock。 我想做的事情是读取一个字符串(比如"Barack Obama")并把它放到一个变量中:

#include <stdio.h>

int main(void)
{
    char name[100];

    printf("Enter your name: ");
    scanf("%s", name);
    printf("Your Name is: %s", name);

    return 0;
}

输出:

Enter your name: Barack Obama
Your Name is: Barack

我该如何让程序读取整个名称?


1
只需要一个简单的答案,使用:scanf("%[^\n]", char_variable_name); - user7122338
13个回答

-1

"%s" 会读取输入,直到遇到空格为止。

如果您想读取一行(即包括空格在内的所有字符,直到遇到换行符),gets 可能是一个不错的起点。


8
“gets”函数只会在你的代码中引入故障点,建议改用“fgets”函数。使用“fgets”能够获得更好的效果。 - John Bode
1
@John,scanf同样不安全,特别是使用"%s"。显然,OP并没有编写生产代码,而且可以预期的是,到他们编写生产代码时,他们将意识到fgets提供了保护,以防止缓冲区溢出。我试图用“好的起点”这几个词来总结所有这些。 - davin
在使用 gets 前需要先清空标准输入流,如果之前使用过 scanf =)) while((c=getchar())!='\n' && c!=EOF); - Hieu Nguyen
使用 gets() 是完全不可取的!这是一条通往灾难的道路,因为它没有提供避免缓冲区溢出的方法。它甚至不再是 C 语言的一部分了。 - alk

-1
"

"巴拉克·奥巴马"中'巴拉克'和'奥巴马'之间有一个空格。为了适应这种情况,请使用以下代码;

"
#include <stdio.h>
int main()
{
    printf("Enter your name\n");
   char a[80];
   gets(a);
   printf("Your name is %s\n", a);
   return 0;
}

3
你的 gets() 函数可能会引起安全问题,如果我没记错的话就是缓冲区溢出。这里的另一个答案已经解释了我的意思。 - Parth Sane
1
为什么gets函数如此危险,不应该使用?gets()自C99以来已被弃用,并在C11中删除,早在2016年之前。 - phuclv

-7
scanf("%s",name);

使用 &scanf 输入


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