c - GCC 投诉——赋值从指针生成整数而不进行强制转换

标签 c

我正在尝试删除 fgets() 附加的尾随 \n 字符。我将此字符替换为终止字符的字符串 \0

为什么编译器给出错误:“赋值从指针生成整数而不进行强制转换”。

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 made integer from没有转换的指针”.

你应该写的是:

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';
    }
}

关于c - GCC 投诉——赋值从指针生成整数而不进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5061708/

相关文章:

c - 为什么右移 C 中的负数会在最左边的位上带来 1?

c - 从不兼容的指针类型传递参数 (C)

c - 为什么要打印? (C语言)

比较两个字符串中的单词

c - 如何知道文件是否正在被复制?

c - Windows API 在 GetStdHandle() 中不起作用

c - 通过 voidpointer 传递 char* args[]

将用户输入与 C 中的文本文件进行比较

c - 我在哪里可以学习串行/终端接口(interface)编程?

C 的 scanf 函数。如果使用宽度修饰符,例如 : %5d. 如何防止用户输入的任何多余数字被读入下一个 %d 说明符?