2013-08-07 30 views
0

在下面的代碼中,我做錯了什麼?我在eclipse中運行代碼並使用MinGW C編譯器。當我運行它時,eclipse停止響應。當我調試代碼時,它斷線複製指針字符不按預期方式工作

*start = *end; 

我在調試模式下驗證了* start和* end的值,並且none爲null。

void func1(char *str) 
{ 
    char *end, *start; 
    end = start = str; 
    char tmp; 

    if (str) 
    { 
     while (*end) 
      ++end; 
     --end; 

     while (start < end) 
     { 
      tmp = *start; 
      *start = *end; 
      *end = tmp; 

      start++; 
      end--; 
     } 
    } 
} 

任何提示/想法?

+2

可能是很多東西,也許你正在使用字符串?提供[SSCCE](http://www.sscce.org/)將使我們能夠更好地爲您提供幫助。 –

+5

這幾乎可以肯定是由於傳入只讀字符串文字,但是您還有另一個問題:如果字符串是空字符串'「」',那麼'--end'的遞減在開始之前放置'end'的字符串,這在技術上是未定義行爲,儘管這不太可能導致任何實際問題。 –

+0

你怎麼知道'--end'是合法的? –

回答

3

所以要根據您的反饋信息是通過一個字符串,"Hello World"func1,修改字符串常量是不確定的行爲,你可以選擇使用這樣的事情,它會工作:

char arr1[] = "hello world" ; 
func1(arr1) ; 

雖然亞當Kerrek指出你需要爲你的代碼添加更多的錯誤檢查,但是這應該解決你的直接問題。