2014-11-02 35 views
-3

我試圖扭轉一個字符串而不使用臨時字符串,但是當我執行該程序時,我的olllo結果不是olleH如何在不使用臨時字符串和C庫的情況下反轉字符串?

這裏是我的代碼:

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

    int main(){ 
     char *str = strdup("Hello"); 
     int reverse(char * str){ 
      int i=0; 
      int j = strlen(str)-1; 
      while(i<=j){ 
       (str[i]) = (str[j]); 
       i++; 
       j--; 
      } 
     return 0; 
     } 
     reverse(str); 
     printf("string = %s\n", str); 
     return 0; 
    } 
+0

這不是C.您不能在C中嵌套函數定義。 – rightfold 2014-11-02 15:04:55

+1

@rightføld:他可能使用允許它的gcc擴展名。 – Jack 2014-11-02 15:07:08

+0

這不是重複的,我試圖創建一個函數,它可以在不使用臨時字符串的情況下反轉字符串。我沒有找到這樣的例子 – 2014-11-02 15:14:26

回答

1

你不能做這樣的事情,因爲你的char *str是一種不斷變化的:你只要把它的東西,而無需使用任何動態內存分配函數像malloc()。除非您複製它,否則您不能修改此指針的內容。

使用strdup(char *)這樣的:

char * str = strdup("Hello"); 

然後你就可以修改你的字符串的內容。

+0

我試過這個,但我有olllo作爲結果,而不是olleH – 2014-11-02 15:19:41

+1

@JamesH現在分段錯誤已解決,我建議問一個新問題。 – 2501 2014-11-02 15:22:45

+0

現在問題出在你的算法中。當你交換你的角色時,你永遠不會把str [i]的前一個值存儲在tmp_char中,你只會丟失它。 – Amina 2014-11-02 15:25:15

相關問題