2010-03-13 42 views
8

Tengo dos variables:comparar la igualdad de char [] en C

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

Quiero comprobar si estos dos son iguales ... usando charTime == buf no funciona.

¿Qué debo usar y alguien puede explicar por qué el uso de == no funciona?

¿Sería esta acción diferente en C y C++?

+0

btw: 'char []' es un tipo incompleto. 'charTime' es en realidad de tipo' char [5] 'y' buf' es en realidad de tipo 'char [14]'. El compilador cuenta para nosotros en este caso para completar el tipo. – sellibitze

Respuesta

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

C++ y C (quitar std:: para C):

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

Pero el verdadero C manera ++:

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

Usando == no funciona porque intenta compare las direcciones del primer carácter de cada matriz (obviamente, no son iguales). No comparará el contenido de ambas matrices.

+0

Esto se debe a que C++ permite la sobrecarga del operador, que sobrecarga el '==' para hacer una comparación de contenido, en lugar del '' 'predeterminado '' char [] '' s' == ', que es referencia-comparación. – Pindatjuh

+0

¿No necesitarías # definir también tu tipo de bool para C? – zellio

+0

@mim: C99 tiene un tipo 'bool'. Por lo tanto, probablemente solo necesite definirlo con MSVC. – Joey

0

Compruébelos en un bucle for. Obtenga los números ASCII para cada char, una vez que cambian, no son iguales.

+0

¿Es esta la forma más sencilla de hacerlo? Debe ser algo mejor? – rksprst

+0

Hay referencia a Johannes Schaub - litb post. –

3

En c se puede utilizar la función strcmp de string.h, devuelve 0 si son iguales

#include <string.h> 

if(!strcmp(charTime, buf)) 
0

Estás mirando la identidad charTime y buf. Para verificar la igualdad, recorra cada carácter en una matriz y compárelos con el carácter relacionado en la otra matriz.

+0

o use strcmp ... – lajuette

1

En una expresión que usa ==, los nombres de las matrices char decaen en char* señalando el inicio de sus respectivas matrices. La comparación se realiza en términos de los valores de los punteros y no de los contenidos reales de las matrices.

== solo devolverá true para dos punteros que apuntan a la misma ubicación y falso, en caso contrario, incluso si apuntan a dos matrices con contenido idéntico.

Lo que necesita es la función de biblioteca estándar strcmp. Esta expresión se evalúa como verdadera si las matrices contienen los mismos contenidos (hasta el carácter nulo de terminación que debe estar presente en ambas matrices desde strcmp para funcionar de forma segura).

strcmp(charTime, buf) == 0 
Cuestiones relacionadas