2014-10-30 109 views
-2

在C中,如果兩個字符串相等,strcmp()函數返回0。 當我給這樣的代碼,strcmp()在與不等字符串比較時返回0

char str[10] = "hello"; 
if(strcmp(str,strrev(str))==0) 
{ 
printf("1"); 
} 
else 
printf("0"); 

這應該打印1個如果一個迴文字符串或它應該打印0,如果它不是一個迴文。 但即使給定字符串「hello」不是迴文,它也會打印1。錯誤在哪裏?

+1

閱讀您首先嚐試使用的功能的文檔。 strrev似乎恢復給定的字符串,而不是創建一個新的。故事結局。 – zubergu 2014-10-30 10:25:18

+1

而不是結束「strcmp()比較不等字符串時返回0」,考慮'strcmp()'已經有40多年了,並且工作正確。問「爲什麼字符串'str'和'strrev(str)'相等? – chux 2014-10-30 14:12:19

回答

1

strrev()不是一個standatd C庫函數。

strrev()正反轉的實際字符串str,然後再與改變的字符串strcmp()去。所以結果總是相同的。

如果你想有希望的結果:

  1. 使原始字符串
  2. 的副本傳遞原始字符串strrev()
  3. 與早期的副本進行比較。
6

什麼是strrev()?這不是一個標準的C函數。

我的假設是,它不會像你想象的那樣工作,即它不會創建並返回字符串的新堆副本。當然,如果你期望得到,那麼就有一個錯誤,你不能保留返回的指針,所以你可以在完成之後使用free()

基本上,你似乎希望C字符串在高級語言中表現得像字符串一樣,他們實際上並不這樣做。