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

时间:2016-07-01 18:41:55

标签: c string scanf

我是编程新手。我键入这个简单的代码,我不断收到此错误消息。有谁知道编译器停止工作的原因?我检查了编译器设置并单击了自动检测。它仍然无法正常工作。

任何建议表示赞赏。顺便说一下,我是编程新手,所以如果解释一些东西,请将其分解。

#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;
}

2 个答案:

答案 0 :(得分:1)

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

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

#define SIZE 32
char name[SIZE] = {0};

然后使用%s格式说明符将是正确的。像

这样的东西
scanf("%31s", name);  //32-1, reserve one for null-terminator

将完成这项工作。

答案 1 :(得分:0)

%s格式说明符需要指向char(指向char数组)的指针,但nameint。< / p>

name更改为字符数组。

char name[100];