以下c代码出错[分段故障]

时间:2015-04-16 09:06:48

标签: c segmentation-fault printf format-specifiers

使用*s代替char s时出现细分错误。 如果我将*s更改为s,我会收到名为char指向整数的错误。请帮我查找错误。我也用谷歌搜索但无法纠正错误。

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

}



 }

3 个答案:

答案 0 :(得分:2)

对于像

这样的定义
char *s,o,a,b,j[20];
  • s的类型为char *
  • oab属于char
  • 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. 启用编译器警告并注意它们。
  3. 相关阅读:从C11标准,章节§7.21.6.1,fprintf()函数(强调我的)

      

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

    并且有关于undefined behaviour的说明。

答案 1 :(得分:0)

听起来有点偏离主题,但这一行:

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

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

答案 2 :(得分:0)

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

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

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

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

s=malloc(30);
strcpy(s,"ADD");
相关问题