目前尚不清楚为什么我会收到警告:
[警告]传递'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
}
答案 0 :(得分:2)
有时你只需要在早上重新审视一个问题。我意识到strlen正在寻找指向字符串的指针,并且' str'被定义为指针。所以* str将是指向指针的指针。所以警告是正确的。它应该读取len = strlen(s)而不是len = strlen(* s)。它是' str'指着' bfr'不是* str;
回答了我自己的问题。