2014-03-13 25 views
0

數組指針我已經重新開始studdy C,所以這可能是一個愚蠢的問題,但在這裏它是:赤爲指針

首先,我使用這個標誌:-std = C99 -Wall

我字符數組的指針,調用它的常用3 我也得到了一個字符指針,稱之爲X 我也知道有多少是做編曲的內部存在的項目(指針),我得到這個號碼保存在一個int調用:Uniq_names

現在我想知道是否有一種方法來檢查X是否存在於arr中

我已經tryed做這樣的:

int i = 0; 
while (i < Uniq_names){ 
    if (X == arr[i]){ 
     //do something 
    } 
    i++; 
} 

,但它不工作了,我想不通爲什麼。

那麼爲什麼這不工作?我該如何做這個檢查?

編輯1: 我沒有想到的代碼去評論(這裏我用有一個打印之後的操作),但它從來沒有。

我知道一個事實,即指向一個對象的指針確實存在於數組中,並且指向與指針X指向的相同對象。

說arr包含一個指向K的指針,我比較的指針X也指向K,所以這兩個指針是相同的(他們不是?)但仍然是代碼裏面的「if」語句永遠不會運行。

希望這使得它更清晰

編輯2:

謝謝你們!問題,即解決了,當我用的strcmp!

大thx!

+0

你可以在它如何不工作更精確?你期望什麼,發生了什麼? –

+1

你能說明'arr'和'X'是如何聲明的嗎?另外,你是否試圖在memory_中找到一個指向_same位置的指針,或者你是否想要找到一個匹配的字符串? – augurar

+0

@pranitkothari,Uniq_names是arr中的項目數 –

回答

2

如果要測試2個字符串是否相等,可以使用string.h中聲明的函數strcmp

變化if(X == arr[i])

if(strcmp(X, arr[i]) == 0) 
1

X == arr[i]檢查指針(即存儲器地址)是否相同。如果你想查看第一個char值是否相同,你需要解引用和比較顯式值。在這種情況下,你需要*X == *arr[i]

要比較字符串,可以使用簡單的for循環。

bool matches; 
char* X = arr[i]; 
int j = 0; 
while *X!= NULL;{ 
    if(X[j]==arr[i][j]){ 
     matches = true; 
     j++; 
    } 
    else{ 
     matches = false; 
     break; 
    } 

本示例區分大小寫。

+1

這將檢查第一個字符是否相等,而不是*整個*字符串。 – halex

+0

的確,我沒有意識到OP在使用它們作爲字符串。現在編輯我的答案。 – GregWW