繁体   English   中英

在以下c代码中出现错误[分段错误]

[英]Getting error in following c code [Segmentation fault]

使用*s代替char s时出现分段错误。 如果我将*s更改为s则会得到名为char指向整数的指针的错误。请帮助我找到错误。我也用Google搜索但无法纠正它。

#include<stdio.h>


main()
{
char *s,o,a,b,j[20];
printf("code generation\n----------------------");
printf("Enter the code:\n");
scanf("%s",j);
int c=1;
while(c==1){
        o=j[1];
        a=j[0];
        b=j[2];

        switch(o){
        case '+':
               s="ADD";
                break;
            case '-':
                s="SUB";
                break;
            case '*':
                s="MUL";
                break;
            case '/':
                s="DIV";
                break;
            case '=':
                s="MOV";
                break;
            default:
                s="INV";
        }
        printf("Code Generated:%s %s , %s\n",s,a,b);

}



 }

对于像这样的定义

char *s,o,a,b,j[20];
  • schar *类型。
  • oabchar类型
  • j的类型为char [20] (数组)。

因此,您需要更改代码

printf("Code Generated:%s %s , %s\n",s,a,b);

printf("Code Generated:%s %c , %c\n",s,a,b);

因为char的正确格式说明符是%c

建议:

  1. 始终首选int main(void)胜过main()
  2. 启用编译器警告并留意它们。

相关阅读:从C11标准的第§7.21.6.1章, fprintf()函数(强调我的)

如果转换规范无效,则行为未定义。 如果任何参数都不是相应转换规范的正确类型,则行为未定义。

并且,有关未定义行为的说明

听起来有点不合时宜,但这行:

 printf("Code Generated:%s %s , %s\n",s,a,b);

ab不是字符串(= char* ),而是chars。

在您的代码中, ab是字符变量,而不是字符串。 将您的printf更改为这样。

%c是字符的格式说明符。

printf("Code Generated:%s %c , %c\n",s,a,b);

您必须为指针变量char *s分配内存。 然后使用strcpy将值分配给该变量。

s=malloc(30);
strcpy(s,"ADD");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM