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,除非你不这样做;不要让它发生。更新日期:)我们的答案几乎相同。。所以删除了它。很好的回答:)