[C con Clase] comparar dos cadenas
Steven Davidson
srd4121 en njit.edu
Sab Feb 14 04:41:04 CET 2009
Hola Alejo,
Alejo Alejo wrote:
> Hola a todos, he corregido muchos problemas gracias a vosotros ya a
> vuestra rapidez, y aunque ya estoy acabando el programa, me sigue
> soltando un aviso que no se como resolverlo, o al menos lo que he
> probado no ha funcionado...
>
Muchos te han contestado, pero se han centrado más en la comparación,
que es lo que preguntas. Mi aportación es comentarte acerca del código
con el API de MYSQL.
> aviso: la comparación con una literal de cadena resulta en una
> conducta no especificada
>
> Tengo, :
> (si te das cuenta he corregido algunas cosas, jeje...)
>
> MYSQL_RES *res;
> MYSQL_ROW row;
> mysql_query(&conexion, "SELECT * FROM main");
> res = mysql_store_result(&conexion);
> int p=0;
> char array[40][40];
> while ( (row = mysql_fetch_row(res)) )
> {
> strcpy(array[p],row[p]);
> strcat(array[p],"\0");
Estas funciones no funcionarán correctamente, valga la redundancia. Si
las cadenas apuntadas por 'row' no tienen el carácter nulo al final,
entonces 'strcpy()' y 'strcat()' no funcionarán debidamente.
Recuerda que estas dos funciones estándares se basan en cadenas
terminadas en cero. Por lo tanto, la solución es usar la longitud de
cada cadena. Esto se puede hacer invocando 'mysql_fetch_lengths()'. Una
vez que tengamos las longitudes, podemos usar 'strncpy()' o incluso
'memcpy()'. Sinceramente, no necesitamos usar 'strncat()' ni 'strcat()',
ya que no podemos agregar un carácter nulo al final, porque ésta termina
de copiar caracteres al encontrar tal carácter nulo. Simplemente,
asignamos el carácter nulo al último elemento. Esto es,
unsigned long *pLongitudes = mysql_fetch_lengths( res );
while( ... )
{
memcpy( array[p], row[p], pLongitudes[p] );
array[pLongitudes[p]] = 0; /* Agregamos el carácter nulo al final */
}
Realmente, deberíamos comprobar que tales longitudes no sobrepasan la
cantidad máxima de 'array[p]' que en este caso es 40.
> p++;
> /*aqui nesecitaria que comparace la cadena con un texto, tipo: */
> if(array[p]=='!'){
Como ya te han comentado, puedes usar 'strcmp()' o incluso 'strncmp()'
para comparar cadenas. Si quieres comparar un solo carácter, entones eso
mismo estás haciendo.
Espero que esto aclare el asunto.
Steven
Más información sobre la lista de distribución Cconclase