Estoy tratando de comparar dos cadenas. Uno almacenado en un archivo, el otro recuperado del usuario (stdin).strcmp en una línea de lectura con fgets
Aquí es un programa de ejemplo:
int main()
{
char targetName[50];
fgets(targetName,50,stdin);
char aName[] = "bob";
printf("%d",strcmp(aName,targetName));
return 0;
}
En este programa strcmp
, devuelve un valor de -1 cuando la entrada es "bob"
. ¿Por qué es esto? Pensé que deberían ser iguales. ¿Cómo puedo obtenerlo para que lo sean?
Debe evitar el uso de 'strcmp'. Use 'strncmp' en su lugar, especialmente si está comparando con una cadena de ancho fijo. Usar 'strncmp (aName, targetName, strlen (aName))' debería funcionar para usted aquí. – bta
El comentario de bta es incorrecto: use strncmp si desea compararlo con un prefijo, en lugar de con la cadena completa, de modo que, por ejemplo. "bobcat" también coincidirá. –
Lo dije porque 'strcmp' continuará comparando hasta que se llegue a un terminador NULL o las cuerdas difieran. Si no puede estar seguro de que sus cadenas siempre estarán debidamente terminadas en NULL, 'strcmp' puede introducir desbordamientos de búfer y violaciones de acceso a la memoria. 'strncmp' no es solo para leer prefijos; Establezca el parámetro final en el tamaño de su búfer de longitud fija para asegurarse de que no esté desbordando los límites de su matriz. – bta