[英]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];
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()
函數(強調我的)
如果轉換規范無效,則行為未定義。 如果任何參數都不是相應轉換規范的正確類型,則行為未定義。
並且,有關未定義行為的說明 。
聽起來有點不合時宜,但這行:
printf("Code Generated:%s %s , %s\n",s,a,b);
a
和b
不是字符串(= char*
),而是chars。
在您的代碼中, a
和b
是字符變量,而不是字符串。 將您的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.