使用*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);
}
}
答案 0 :(得分:2)
对于像
这样的定义char *s,o,a,b,j[20];
s
的类型为char *
。o
,a
,b
属于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
。
建议:
int main(void)
而不是main()
。相关阅读:从C11
标准,章节§7.21.6.1,fprintf()
函数(强调我的)
如果转换规范无效,则行为未定义。 如果任何参数不是相应转换规范的正确类型,则行为未定义。
并且有关于undefined behaviour的说明。
答案 1 :(得分:0)
听起来有点偏离主题,但这一行:
printf("Code Generated:%s %s , %s\n",s,a,b);
a
和b
不是字符串(= char*
),而是字符。
答案 2 :(得分:0)
在您的代码中,a
和b
是字符变量,而不是字符串。
将您的printf
更改为此类。
%c
是字符的格式说明符。
printf("Code Generated:%s %c , %c\n",s,a,b);
您必须为指针变量char *s
分配内存。并使用strcpy
将值赋给该变量。
s=malloc(30);
strcpy(s,"ADD");