2015-11-26 60 views
1

目前尚不清楚为什么我得到的警告:路过的“strlen的”参数1时将整数指针不进行强制转换

【警告】路过的“strlen的”参数1时将整数指针没有施放[默认启用] 预期“为const char *”,但参数的类型“字符”

下面

在两个含有的strlen的3条语句的()的。

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

现在,strlen arg 1被定义为strlen(const char * string)。所以我 会期望strlen(bfr)也产生一个错误,因为bfr []是一个 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

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

回答了我自己的问题。

相关问题