C 为什么尝试在名称中扫描会产生分段错误?

C 为什么尝试在名称中扫描会产生分段错误?,c,string,scanf,C,String,Scanf,我是编程新手。我输入了这个简单的代码,并且不断收到这个错误消息。有人知道编译器停止工作的原因吗?我已经检查了编译器设置并单击了自动检测。但它仍然不起作用 如有任何建议,我们将不胜感激。顺便说一句,我对编程还不熟悉,所以如果要解释什么的话,就把它分解一下 #include <sdtio.h> #include <stdlib.h> int main() { int name; printf("What is your name?\n"); sca

我是编程新手。我输入了这个简单的代码,并且不断收到这个错误消息。有人知道编译器停止工作的原因吗?我已经检查了编译器设置并单击了自动检测。但它仍然不起作用

如有任何建议,我们将不胜感激。顺便说一句,我对编程还不熟悉,所以如果要解释什么的话,就把它分解一下

#include <sdtio.h>
#include <stdlib.h>

int main()
{

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

    printf("Your name is %s", name);    
    return 0;
}
#包括
#包括
int main()
{
int名称;
printf(“您叫什么名字?\n”);
scanf(“%s”,名称);
printf(“您的名字是%s”,name);
返回0;
}

这里的问题是,您对特定格式说明符使用了错误的参数类型(或者我们可以说,反之亦然)
%s
需要一个指向
char
数组的指针作为参数,而不是
int
。它调用

您需要使用
char
数组来输入字符串,例如

#define SIZE 32
char name[SIZE] = {0};
scanf("%31s", name);  //32-1, reserve one for null-terminator
然后使用
%s
格式说明符将是正确的。差不多

#define SIZE 32
char name[SIZE] = {0};
scanf("%31s", name);  //32-1, reserve one for null-terminator

将执行此任务。

格式说明符要求指向
字符的指针(指向
字符的数组),但
名称
int

name
更改为字符数组

char name[100];

欢迎来到堆栈溢出!请把你的研究成果展示给我。请先阅读本页,不要张贴文字图片。复制并粘贴到这里。编译器不会停止工作。是您的程序在运行时崩溃。请使用%d作为int类型,而不是%s请不要将代码作为图像发布,它不允许其他人使用代码试图重现问题,复制粘贴文本表单,这次我为您完成了,但是请阅读我在第一条评论中提到的链接。
scanf
%s
是一个等待发生的缓冲区溢出。从某种意义上说,
%s
永远都是不正确的。@melpomene,除非你不这样做;不要让它发生。更新日期:)我们的答案几乎相同。。所以删除了它。很好的回答:)