2016-03-03 85 views
-1

下面的代碼是用來反C風格String.But當我運行這段代碼,爲什麼C代碼產生總線錯誤

它產生錯誤:

[1] 42496 bus error ./a.out

和我不不知道如何解決這個問題。你可以幫我嗎?感謝您在

提前:)

#include <stdio.h> 
    void reverse(char * str){ 
      char * end = str; 
      char tmp; 
      if(str){ 
       while(*end){ 
        ++end; 
       } 
       --end; 
       while(str<end){ 
        tmp = *str; 
        *str++ = *end; 
        *end-- = tmp; 
       } 
      } 
    } 
    int main(){ 
     char * str = "abcd"; 
     reverse(str); 
     printf("%s\n",str); 
    } 

回答

4
char * str = "abcd"; 

這是一個string literal,你不能修改它。這是一個常數。如在您的功能reverse中,您嘗試修改它,因此會出現錯誤。

而是宣佈這樣的 -

char str[] = "abcd"; 

Output

+0

你回答我的Windows機器上運行,解決了我的問題,謝謝:) –

+0

詳細信息:一個字符串可以/不可以被修改的。試圖修改它是UB。 – chux

0

list -l,並檢查文件的權限。 順便說一句,編譯和使用gcc

相關問題