2012-11-18 72 views
3

可能重複:
What is the difference between char s[] and char *s in C?
Why does this program give segmentation fault?總線錯誤10

這裏是代碼:

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

void reverse(char *c){ 
    int len = strlen(c); 
    char tmp; 
    int i; 
    for(i = 0; i < len; i++){ 
     tmp = c[len-1-i]; 
     c[len-1-i] = c[i]; 
     c[i] = tmp; 
    } 
} 

int main(){ 
    char *s = "antonio"; 
    //printf("%zd\n", strlen(s)); 
    reverse(s); 
    printf("%s\n", s); 
    return 0; 
} 

的問題是反向(字符* c),它採取了一個字符串廣告相反,但我不明白它在哪裏g錯了。

+2

你試圖修改字符串文字。這是未定義的行爲,通常會崩潰。 –

+2

你沒有使用你的編譯器警告和/或注意它們。再次編譯代碼,並啓用所有警告,並確保您瞭解編譯器告訴您的所有內容。自動化工具可以在您需要尋求幫助之前爲您提供很長的路要走! –

+0

@KerrekSB我沒有收到任何警告,我會看到如何啓用我的編譯器的所有警告。 – AR89

回答

5

有兩種錯誤的位置:

1)

您正試圖改變一個字符串,從而導致未定義的行爲,表現爲你的情況總線錯誤。

變化

char *s = "antonio"; 

char s[] = "antonio"; 

2)

而且您運行的是整個字符串長度的循環計數器:

for(i = 0; i < len; i++) 

這種方式,你會找回原點inal字符串。你想要的只是將一半的字符與另一半交換:

for(i = 0; i < len/2; i++) 
+0

http://stackoverflow.com/a/3735133/635608 – Mat

+0

@Mat:謝謝,正在尋找一個。 – codaddict

+0

@codaddict有什麼區別:char * s =「antonio」; char s [] =「antonio」; char s * = malloc(size);?我知道函數(char a [])變成了函數(char * a),在這種情況下會發生什麼? – AR89