2010-03-13 17 views
8

ho due variabili:Confronta parità di char [] in C

char charTime[] = "TIME"; 
char buf[] = "SOMETHINGELSE"; 

voglio verificare se questi due sono uguali ... utilizzando charTime == buf non funziona.

Cosa devo usare e qualcuno può spiegare perché l'utilizzo di == non funziona?

Questa azione sarebbe diversa in C e C++?

+0

btw: 'char []' è un tipo incompleto. 'charTime' è in realtà di tipo' char [5] 'e' buf' è in realtà di tipo 'char [14]'. Il compilatore conta per noi in questo caso per completare il tipo. – sellibitze

risposta

17
char charTime[] = "TIME"; char buf[] = "SOMETHINGELSE"; 

C++ e C (rimuovere std:: per C):

bool equal = (std::strcmp(charTime, buf) == 0); 

Ma il vero modo in cui C++:

std::string charTime = "TIME", buf = "SOMETHINGELSE"; 
bool equal = (charTime == buf); 

Utilizzando == non funziona perché cerca di confronta gli indirizzi del primo carattere di ciascun array (ovviamente, non sono uguali). Non confronterà il contenuto di entrambi gli array.

+0

Questo perché il C++ consente l'overloading dell'operatore, che sovraccarica il '==' di fare effettivamente un confronto dei contenuti, invece il "default" 'char []' 's '==', che è un confronto di riferimento. – Pindatjuh

+0

Non avresti bisogno di # definire il tuo tipo di booster anche per C? – zellio

+0

@mim: C99 ha un tipo 'bool'. Quindi probabilmente dovresti solo definirlo con MSVC. – Joey

0

Controllarli in un ciclo for. Ottieni i numeri ASCII per ogni carattere una volta che cambiano non sono uguali.

+0

È questo il modo più semplice per farlo? Deve essere qualcosa di meglio? – rksprst

+0

Ci si riferisce a Johannes Schaub - litb post. –

3

In C è possibile utilizzare la funzione strcmp da string.h, restituisce 0 se sono uguali

#include <string.h> 

if(!strcmp(charTime, buf)) 
0

Si sta verificando l'identità charTime e buf. Per verificare l'uguaglianza, eseguire il looping su ciascun carattere in un array e confrontarli con il carattere correlato nell'altro array.

+0

o utilizzare strcmp ... – lajuette

1

In un'espressione che utilizza ==, i nomi degli array char si decompongono in char* indicando l'inizio dei rispettivi array. Il confronto viene quindi eseguito in termini di valori dei puntatori stessi e non del contenuto effettivo degli array.

== restituirà true solo per due puntatori che puntano alla stessa posizione e false altrimenti, anche se puntano a due array con contenuti identici.

Quello che ti serve è la funzione di libreria standard strcmp. Questa espressione è vera se gli array contengono gli stessi contenuti (fino al carattere null che deve essere presente in entrambi gli array per strcmp per funzionare in modo sicuro).

strcmp(charTime, buf) == 0