GCC投诉 – 分配在没有强制转换的情况下从指针生成整数

我试图剥离fgets()追加的尾随\n字符。 我用字符串终止char, \0替换此字符。

为什么编译器会给出错误:“Assignment在没有强制转换的情况下从指针生成整数”。

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

这里有一个更完整的代码示例,如果需要一些上下文则是问题。

 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"; : } 

你的问题在于声明:

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

这是尝试将指向 C字符串的指针分配给数组元素,这是一个整数类型的char ,因此错误消息"Assignment makes integer from pointer without cast"

你应该写的是:

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

它将一个字符分配给数组元素。

顺便说一句,你应该注意长度大于(大约)100个字符的行。 你只会阅读该行的第一部分,它最后不会换行符,并且下次循环时你会将该行的其余部分读作一个单独的行(如果你有一条线,例如1K长)。

对于它的价值,您可以使用以下行解决代码问题:

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