Получение ошибки в следующем коде c [Ошибка сегментации]

Получение ошибки сегментации при использовании *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 ответа

For a definition like

char *s,o,a,b,j[20];
  • s имеет тип char *,
  • o, a, b имеют тип char
  • j имеет тип char [20] (array).

So, you need to change your code

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

в

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

as the correct format specifier for a char является %c,

Предложение:

  1. Всегда предпочитаю int main(void) над main(),
  2. Enable compiler warnings and pay heed to them.

Related reading: From C11 standard, chapter §7.21.6.1, fprintf() function (emphasis mine)

Если спецификация преобразования недопустима, поведение не определено. Если какой-либо аргумент не является правильным типом для соответствующей спецификации преобразования, поведение не определено.

And, a note about undefined behaviour.

Звучит немного не по теме, но эта строка:

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

a а также b не строки (=char*), но символы.

В вашем коде a а также b являются символьными переменными, а не строкой. Измени свой printf в, как это.

%c является спецификатором формата для символа.

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

Вы должны выделить память для переменной указателя char *s, И присвоить значение этой переменной с помощью strcpy,

s=malloc(30);
strcpy(s,"ADD");
Другие вопросы по тегам