2014-01-10 50 views
1

我想比較兩個char數組。但是,DoSomething()函數永遠不會被調用。我無法弄清楚爲什麼。這個C庫函數的用法有什麼問題?

我在做什麼錯?

//The value the user types in will be stored here: 
char TempStorage[]={0,0,0,0,0,0}; 

//User types in a sequence here: 
GetInput(); 

//One of the sequences that TempStorage will be compared to. 
char Sequence[]={1,2,3,4,0,0}; 


//If the user typed in "123400" then DoSomething(). 
if(memcmp(TempStorage, Sequence, sizeof(TempStorage) == 0)) 
{ 
    DoSomething(); 
} 
+0

同比可能要初始化序列這種方式'char Sequence [] = {'1','2','3','4',0,0};' – manuell

+0

GetInput()函數是做什麼的?也許它會爲你的'TempStorage'指定ascii數字。也許它有另一個bug。 – nos

回答

7

錯位的paren。

if(memcmp(TempStorage, Sequence, sizeof(TempStorage) == 0)) 

應該

if(memcmp(TempStorage, Sequence, sizeof(TempStorage)) == 0) 

是那些真正的,你解析,並放置在一個數組六個輸入?或者TempStorage是輸入的一串ASCII字符?如果是後者,則應該使用字符串比較,並且應該使用適當的ASCII代碼來處理要比較的字符。 (這是0x30或'\ 0'`),這意味着您不會比較無意義的填充(如果存在)。

char *input = GetInput(); 
if (strcmp(input, "1234") == 0) { ... } 
+0

尖銳的眼睛!!!!! – haccks

+0

我認爲在這裏輸入問題時,這只是一個錯字。真正的問題是他正在比較的字符串,或者可能不是......猜測那也會失敗! – AnthonyLambert

+0

@AnonyLambert,是的,它從一開始就讓我煩惱。在我的回答中,我終於補充了一點。 – ikegami

3

你的角色將解析爲ASCII值,所以你應該將它指定爲:

char Sequence[]={'1','2','3','4',0,0}; 

或比較對像一個實際的字符串:

char Sequence[]="1234";