2016-11-24 45 views
-1

由於某些原因,即使變量手錶顯示var等於,該條件也沒有通過。 enter image description here不符合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)) 
+3

你比較字符串(這是不相等)地址要比較字符串的內容使用的strcmp()從string.h中 –

+0

當然他們不是等於。你比較指針,並且可以清楚地看到'0xb01a70!= 0xb01770' – StoryTeller

+0

@JerryJeremiah,關於如何完成strcmp()函數的任何幫助?我應該得到2個額外的字符變量來移動指針值 – Fenomatik

回答

1

正如你從截圖中可以看到自己的對象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) 
+0

字符串不是指針。:) – d3L

+0

@ d3l我說他們是指針嗎?我不明白你的評論以及你爲什麼低估了我的正確答案。 –

+0

@VladfromMoscow如果我想使它們等於NULL,例如:arr [r1] [0] = NULL; arr [r1] [1] = NULL; arr [r1] [2] = NULL;這些會使它等於NULL,否則,如果不是,那麼這樣做的正確方法是什麼? – Fenomatik

0

你不能比較C字符串像任何其他語言,因爲在C字符串是指針

所以你不是比較值,但字符串的地址是不相同的。

要檢查兩個字符串是否相等,請使用strcasecmpstrcmp函數<string.h>

例子:

if (strcmp(arr[r2][1], t_pat) == 0) { 
    // arr[r2][1] and t_pat are equal by value 
} 
+0

字符串不是指針:) –

+0

隨意編輯我的答案 – d3L