传递'strlen'的参数1使得整数指针没有强制转换

时间:2015-11-26 01:04:17

标签: gcc warnings

目前尚不清楚为什么我会收到警告:

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

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

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

现在实际上,strlen arg 1被定义为strlen(const char * string)。所以我 因为bfr []是a,所以预期strlen(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
}

1 个答案:

答案 0 :(得分:2)

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

回答了我自己的问题。