Получение ошибки в следующем коде 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
,
Предложение:
- Всегда предпочитаю
int main(void)
надmain()
, - 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");