strcmp da como resultado falso cuando las cadenas son iguales

Este es mi código:

if(strcmp(pch,map[i].name)==0){ printf("Equal\n"); return 0; } 

pch se lee desde un archivo, map[i].name tiene un tamaño conocido de 64. Esto funciona muy bien para cadenas más pequeñas que 64. cuando se comparan estas dos cadenas de tamaño inferior a 63:

file11111111111111111111111111111111111111111111111111111111111 y

 file11111111111111111111111111111111111111111111111111111111111 

todo es perfecto y el resultado esperado es igual, pero cuando se comparan estos dos (de tamaño 64):

file111111111111111111111111111111111111111111111111111111111111 y

 file111111111111111111111111111111111111111111111111111111111111 

el regreso es falso Pensé en hacer:

  if(strncmp(pch,map[i].name,64)==0){ printf("Equal\n"); return 0; } 

Y funciona para cadenas de tamaño exacto de 64, pero para cadenas que son más pequeñas, el resultado es aleatorio. ¿Con qué tipo de rareza estoy tratando aquí?

EDITAR: este es el código completo:

  char * pch; char tempFilesNeeded[100*64+100]; strcpy(tempFilesNeeded,map[i].filesNeeded); pch = strtok(tempFilesNeeded,","); while (pch != NULL) { if(strcmp(pch,map[i].name)==0){ printf("Equal\n"); return 0; } pch = strtok (NULL, ","); } 

Bueno si es

 char pch[64]; 

entonces no puede tener 64 caracteres visibles allí, ya que la última entrada es necesaria para la terminación. Si tiene "file111111111111111111111111111111111111111111111111111111111111" en esa matriz, no se termina y al llamar a strcmp() se invoca un comportamiento indefinido.

Además, como un punto menor, decir que strcmp() devuelve “falso” es incorrecto, ya que su retorno no es booleano. Devuelve la relación entre los dos primeros personajes diferentes; Si no hay caracteres diferentes, las cadenas son iguales, entonces devuelve cero.

Si uno o ambos arreglos tienen un tamaño exacto de 64, falta el ‘\ 0’ final que termina la cadena.