2012-03-31 82 views
-2

可能重複:
How to reverse a string in place in c using pointers?如何正確反轉字符串?

我試圖扭轉使用C. 段故障發生的字符串。任何想法爲什麼?

這裏是我的代碼:

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

    int main(void) 
    { 
    char *str1 = "abbd"; 
    char *str2; 


    str2 = str2 + strlen(str1)-1; 

    while(*str1 != '\0') 
    *(str2--) = *(str1++); 


    printf("%s", str2); 

    return 0; 
    } 
+0

即使你找出分段錯誤,它也不會改變字符串。你能弄清楚爲什麼? – kindall 2012-03-31 01:15:55

+0

即使您修復了大家指出的錯誤,也無法修改您的字符串,因爲該字符串是不可修改的。你不能修改字符串文字。 – 2012-03-31 01:31:10

回答

0

沒有正確的分配(在聲明或malloc中分配適當的長度),並且你沒有真正移動字符串並檢查你的條件是否合適(嘗試str [i])。你喚醒了克拉肯。

0

看起來你並沒有爲STR2分配任何空間,剛纔的指針。

0
char *str2; 
str2 = str2 + strlen(str1)-1; 

您聲明瞭一個指針str2,但將其值初始化爲垃圾。 (str2 + ...

您是否試圖進行就地修改?這對於此代碼不起作用,char *foo="bar";格式將"bar"放置在支持該平臺的寫保護內存空間中。

您是否試圖做一個不合適的修改?如果是這樣,你忘了分配這個空間。

0

你沒有爲str2分配內存。

str2 = (char *)malloc(sizeof(char) * (strlen(str1) + 1)); 

我還沒有嘗試過,但似乎你會想設置STR2 = STR2 +的strlen(STR1),否則,我想你會跑出你的STR2的「前」緩衝區也是如此。

我建議把你的字符串當作數組來處理,讓編譯器爲你做指針運算。