【问题标题】:passing argument 1 of 'strlen' makes pointer from integer without a cast传递 'strlen' 的参数 1 使指针从整数而不进行强制转换
【发布时间】:2015-11-26 01:04:16
【问题描述】:

不清楚为什么我会收到以下警告:

[警告] 传递 'strlen' 的参数 1 使指针从整数不进行强制转换 [默认启用] 预期为 'const char *' 但参数的类型为 'char'

在下面包含 strlen() 的 3 个语句中的两个。

即使我尝试施放 *str,它仍然给出相同的警告。 bfr 是一个字符缓冲区。 *str 在调用后指向该字符缓冲区 得到()。如果我使用 strlen(*str) 我会收到警告。如果我使用 strlen(bfr) 我不会。 但是 *str 应该等同于 bfr。因此,关于错误的混乱。

现在实际上,strlen arg 1 被定义为 strlen(const char *string)。所以我 本来预计 strlen(bfr) 也会产生错误,因为 bfr[] 是 char 字符串,也不是 const char。

被制成指针的整数在哪里?

我在 wXDev-C++ 下使用 gcc。

void test(){
    FILE *fileID = fopen("somefile.txt","r");
    char *str, len;
    char bfr[16];

    str = fgets(bfr,16,fileID);      // str will be set equal to &bfr[0]
    len = strlen(*str);              // This gives a warning
    len = strlen((const char)*str);  // This gives a warning
    len = strlen(bfr);               // This does not give a warning
}

【问题讨论】:

    标签: gcc warnings


    【解决方案1】:

    有时您只需要在早上重新审视一个问题。我意识到 strlen 正在寻找指向字符串的指针,而“str”被定义为指针。所以 *str 将是一个指向指针的指针。所以警告是正确的。它应该是 len = strlen(s) 而不是 len = strlen(*s)。它是 'str' 指向 'bfr' 而不是 *str;

    回答了我自己的问题。

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2021-08-13
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多