簡體   English   中英

在以下c代碼中出現錯誤[分段錯誤]

[英]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];
  • schar *類型。
  • oabchar類型
  • 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. 啟用編譯器警告並留意它們。

相關閱讀:從C11標准的第§7.21.6.1章, fprintf()函數(強調我的)

如果轉換規范無效,則行為未定義。 如果任何參數都不是相應轉換規范的正確類型,則行為未定義。

並且,有關未定義行為的說明

聽起來有點不合時宜,但這行:

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

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

在您的代碼中, ab是字符變量,而不是字符串。 將您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM