Queja de GCC: la asignación crea un entero desde el puntero sin una conversión

Estoy tratando de quitar el carácter final \n que fgets() anexa. Estoy reemplazando este carácter con una cadena que termina de caracteres, \0 .

¿Por qué el comstackdor está dando el error: “La asignación hace un entero desde el puntero sin conversión”.

 word[strlen(word) - 1] = "\0"; 

Aquí hay una muestra más completa del código, en caso de que se necesite algún contexto.

 FILE *wordFile = fopen("/temp/words.txt", "r"); char word[100]; while (fgets(word, 100, wordFile)) { // Strip off the trailing the \n so it is not counted // as part of the string length word[strlen(word) - 1] = "\0"; : } 

Su problema radica en la statement:

 word[strlen(word) - 1] = "\0"; 

Esto está tratando de asignar el puntero a la cadena C al elemento de la matriz, un tipo de char integral, por lo tanto, el mensaje de error "Assignment makes integer from pointer without cast" .

Lo que deberías haber escrito fue:

 word[strlen(word) - 1] = `\0`; 

que asigna un carácter al elemento de la matriz.

Además, debe tener cuidado con las líneas que tienen más de (aproximadamente) 100 caracteres. Solo leerá la primera parte de la línea, no tendrá una nueva línea al final, y la próxima vez leerá el rest de la línea como una línea separada a través de su bucle (y esto puede suceder muchas veces si tienes una línea que es, por ejemplo 1K de largo).

Para lo que vale, puede solucionar esos problemas con el código en las siguientes líneas:

 if ((s = strlen (word)) > 0) { if (s[s-1] != '\n') { // Line was too long, do something intelligent. } else { s[s-1] = '\0'; } }