c - 程序不断崩溃

标签 c segmentation-fault scanf

我不知道为什么这个程序不起作用:

 char syze;
 printf("Please enter your desired size (Choose from S,M,L,XL)\n");
 scanf("%s", &syze);

 if(syze =='S')
 {printf("Available");}


 else if(syze =='M')
     {printf("Available");}
 else if(syze =='L')
     {printf("Available");}
 else if(strcmp(syze,"XL")==0)
     {printf("Available");}
 else
     {printf("Please enter a valid character");}
    return 0;

最佳答案

问题出在

 scanf("%s", &syze);

在您的代码中,sizechar 类型,您应该使用 %c 格式说明符来扫描输入。

如果您使用 %s 格式说明符来扫描 char 的输入,基本上您将超出分配的内存,从而创建 undefined behaviour

然后,

 strcmp(syze,"XL")

也是错误的,如 strcmp()需要 (const)char * 作为两个参数,并且您将 char 作为第一个参数传递。您可以简单地使用相等运算符 == 来比较 char

最后,char 将永远无法容纳 "XL"

解决方案:如果您需要将 "XL" 作为输入之一,您可能需要将 syze 更改为数组,喜欢

 char syze[3] = {0};

或者类似的。在这种情况下,您可以将 scanf() 保持为

scanf("%2s", syze);

并使用 strcmp() 比较您的输入。

关于c - 程序不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32082013/

相关文章:

C/malloc 函数/空间通过在函数中传递指针来创建结构实例来分配

c - 一个交换函数被 2 个不同的结构使用

python - 当 QApplication 退出时,QT 引发段错误(核心已转储)

C - 如何让 fscanf() 确定它读取的是否只有数字,没有字符

c - 如何使 .txt 文件对 Visual C 可见

c - 不同日期时间字符串的相同mktime()结果

C: 如果没有单独的功能,代码将无法工作。为什么?

Linux - 无法生成核心转储

assembly - x86 程序集 : Segmentation Fault (Core dumped) while trying to reverse print array

c - scanf ("%[^\n]s",a) 与 gets(a)