2015-11-26 61 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;

回答了我自己的問題。

相關問題