由於某些原因,即使變量手錶顯示var等於,該條件也沒有通過。 不符合c條件的情況
if(arr[r1][1] != NULL) {
t_plat = arr[r1][1];
t_ver = arr[r1][2];
if((arr[r2][1] == t_plat) && (arr[r2][2] == t_ver))
由於某些原因,即使變量手錶顯示var等於,該條件也沒有通過。 不符合c條件的情況
if(arr[r1][1] != NULL) {
t_plat = arr[r1][1];
t_ver = arr[r1][2];
if((arr[r2][1] == t_plat) && (arr[r2][2] == t_ver))
正如你從截圖中可以看到自己的對象arr[r2][1]
商店看重0xb01a70
而對象t_plat
商店看重0xb01770
。
因此,如果你比較存儲在這些對象的值一樣
if((arr[r2][1] == t_plat))
你會得到false
沒有懷疑。這些值彼此不相等。
這些值是什麼?它們是指向字符串的第一個字符的指針。如果要比較指針指向的字符串本身,則必須使用標頭<string.h>
中聲明的標準C函數strcmp
。
因此,你應該寫
if(strcmp(arr[r2][1], t_plat) == 0 && strcmp(arr[r2][2], t_ver) == 0)
你不能比較C字符串像任何其他語言,因爲在C字符串是指針。
所以你不是比較值,但字符串的地址是不相同的。
要檢查兩個字符串是否相等,請使用strcasecmp
或strcmp
函數<string.h>
。
例子:
if (strcmp(arr[r2][1], t_pat) == 0) {
// arr[r2][1] and t_pat are equal by value
}
字符串不是指針:) –
隨意編輯我的答案 – d3L
你比較字符串(這是不相等)地址要比較字符串的內容使用的strcmp()從string.h中 –
當然他們不是等於。你比較指針,並且可以清楚地看到'0xb01a70!= 0xb01770' – StoryTeller
@JerryJeremiah,關於如何完成strcmp()函數的任何幫助?我應該得到2個額外的字符變量來移動指針值 – Fenomatik