2011-08-15 60 views
-1

可能重複:
Getting Segmentation Fault運行時錯誤「分段錯誤」。如何刪除它? (我在Ubuntu的工作。)

// reverse a string 

#include`<stdlib.h>` 
#include`<stdio.h>` 
#include`<string.h>` 
#include`<math.h>` 
int main() 
{ 

    char *string = "mohit",t; 
    int i=0,j; 
    printf(" %d %d",strlen(string), (strlen(string)/2)+1); 
    for(i=0,j=(strlen(string)) ; i<(strlen(string)/2)+1 ; i++,j--) 
    { 
    printf("\n%d",(int) string); 
    printf("\n%d",(int) string+5); 
    printf("\ni string = %c", *(string + i)); 
    printf("\nj string = %c", *(string + j)); 
    t=*(string+i); 
    *(string+i) = *(string + j); 
    *(string + j) = t; 
    } 
    printf("\n = %s", string); 
    return 0; 
} 
+0

您通過學習如何編碼來消除錯誤。 – leppie

+0

@Mat - 編譯器顯示沒有警告 –

回答

1

字符串文字可能位於存儲器的只讀區域;不允許將指針指向一個指向非const char的指針,因此您對string的操作會導致未定義的行爲。你要麼說

const char * string = "mohit"; 

,不修改字符串,或創建字符的自動數組,你可以修改

char string[] = "mohit"; 

後者是你在你的情況需要什麼。

此外,作爲一種風格,在一行中書寫char * s, t;可能會引起誤解;它相當於,應該總是由char * s; char t;替代。

+0

,如果我喜歡 char string [] =「mohit」; char * p = string; 根據你的情況不錯? –

+0

是的,'string'可以是一個非常量字符的指針,因爲它是一個自動數組。它與'char string [6] = {'m','o',...,'t',0};'一樣。 –