我对C语言和StackOverflow比较陌生。我正在尝试编写一个简单的C代码,该代码将提示用户输入他们的姓名,然后显示它。
#include <stdio.h>
int main (void)
{
char name;
printf("Let's do this, please enter your name:");
scanf("%s", &name);
printf("Your name is %s", name);
return 0;
}
代码符合要求,但输入名称后,显示分段错误(核心已转储)。
谢谢您的帮助。
答案 0 :(得分:1)
@Jackie_Legs一个非常小的错误。在变量name
的声明中,您已将其声明为char
。因此它只包含一个字符。
解决方案:为您的名字选择任意大小,例如10或15个字符。并声明为大小数组。
char name[15];
程序的任何其他部分均未更改。另外,您应该在&
中省略字符串中的scanf
符号。
因此只需进行一次更改,您的代码就可以工作。
这是可以使用的更新代码:
#include <stdio.h>
int main (void)
{
char name[15];
printf("Let's do this, please enter your name:");
scanf("%s", name);
printf("Your name is %s\n", name);
return 0;
}
答案 1 :(得分:1)
这是因为您的name变量只能存储单个字符,并且您试图存储多个字符,这将导致程序的行为无法预测(例如分段错误)。
如果知道名称的最大长度,则将变量名称声明为字符数组,例如
char name[20];
您可以在此处存储最大长度为19个字符的名称。您可以根据需要决定数组的长度。
答案 2 :(得分:1)
您需要声明一个字符串,因为单个字母存储在char中,并且多个字符以及最后一个空字符组成一个字符串,可以是诸如名称等之类的字符串。
在您的代码中,您采用了char,该char仅存储一个字符,但是为了存储您的名称(字符串),您将必须采用char数组以及该数组的大小。
将char
替换为 char[size]
,其中size是所需字符串的大小。
这是我对您的代码所做的更改:
#include <stdio.h>
int main (void)
{
char name[30];
printf("Let's do this, please enter your name:");
scanf("%s", name);
printf("Your name is %s", name);
return 0;
}
答案 3 :(得分:0)
由于C中的char name;
char 数据类型仅在变量中包含1个字符,因此引发了错误。但是您的输入是一个字符串。
您需要将变量的声明从char更改为char数组。
char name[50];
printf("Let's do this, please enter your name:");
scanf("%s", name);
printf("Your name is %s", name);
答案 4 :(得分:0)
name
被声明为char
,这意味着它只能包含一个字符。仅仅包含一个字符串(通常由名称组成)是不够的。您需要声明一个char
数组(一个字符数组)。
数组的大小至少应比要读取的最大名称大1。
多余的字节将包含空终止符'\0'
。
char name[SizeOfLargestName + 1];
使用scanf
时,不需要使用&
,因为现在名称指向数组的第一个字节。
scanf("%s", name);