在C中,如果兩個字符串相等,strcmp()函數返回0。 當我給這樣的代碼,strcmp()在與不等字符串比較時返回0
char str[10] = "hello";
if(strcmp(str,strrev(str))==0)
{
printf("1");
}
else
printf("0");
這應該打印1個如果一個迴文字符串或它應該打印0,如果它不是一個迴文。 但即使給定字符串「hello」不是迴文,它也會打印1。錯誤在哪裏?
在C中,如果兩個字符串相等,strcmp()函數返回0。 當我給這樣的代碼,strcmp()在與不等字符串比較時返回0
char str[10] = "hello";
if(strcmp(str,strrev(str))==0)
{
printf("1");
}
else
printf("0");
這應該打印1個如果一個迴文字符串或它應該打印0,如果它不是一個迴文。 但即使給定字符串「hello」不是迴文,它也會打印1。錯誤在哪裏?
strrev()
不是一個standatd C庫函數。
你strrev()
正反轉的實際字符串str
,然後再與改變的字符串strcmp()
去。所以結果總是相同的。
如果你想有希望的結果:
strrev()
什麼是strrev()
?這不是一個標準的C函數。
我的假設是,它不會像你想象的那樣工作,即它不會創建並返回字符串的新堆副本。當然,如果你期望得到,那麼就有一個錯誤,你不能保留返回的指針,所以你可以在完成之後使用free()
。
基本上,你似乎希望C字符串在高級語言中表現得像字符串一樣,他們實際上並不這樣做。
閱讀您首先嚐試使用的功能的文檔。 strrev似乎恢復給定的字符串,而不是創建一個新的。故事結局。 – zubergu 2014-10-30 10:25:18
而不是結束「strcmp()比較不等字符串時返回0」,考慮'strcmp()'已經有40多年了,並且工作正確。問「爲什麼字符串'str'和'strrev(str)'相等? – chux 2014-10-30 14:12:19