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

标签 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;
}

最佳答案

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

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

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

然后使用%s格式说明符将是正确的。类似的东西

scanf("%31s", name);  //32-1, reserve one for null-terminator

会完成这项工作。

关于c - 为什么尝试扫描名称会产生段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38152082/

相关文章:

string - 浮点到字符串的无损转换并返回 : is it possible?

c - 代码错误,用C语言编程

java - 用java编写的C编译器

调用 qsort 比较器

c++ - dlopen 或 dlclose 未调用信号处理程序

c++ - 为什么可以将 const char* 分配给 char*?

c - 使用 UDP 套接字的多个 sendto()

java - 如何替换字符串中的 XML 标签? (还要检查它是否以 xml 标签开头)

c - scanf读取完全不同的数字

c - 如何仅使用 sscanf 从字符串中提取所有数字?