2016-06-25 99 views
-5

我有下面的代碼,我似乎無法確定問題是什麼。C++類型警告

當我編譯的C++程序,編譯程序返回警告關於期望的參數類型char*但參數3的類型爲int

int save (int key_stroke, const char file[]); 

int main() 
{ 
    char i; 
    while(1){ 
     for (i = 8; i <= 190; i++){ 
      if(GetAsyncKeyState(i)== -32767){ 
       save(i,"LOG.TXT"); 
      } 
     } 
    } 
    return 0; 
} 

int save (int key_stroke, const char file[]) 
{ 
    if(key_stroke==1 || key_stroke==2) 
     return 0; 
    FILE *OUTPUT_FILE;//created a pointer reference variable of type File 
    OUTPUT_FILE = fopen(file, "a+"); 
    fprintf(OUTPUT_FILE, "%s", &key_stroke);//this is line that c++ compiler 
    //compiler complains of 
    fclose(OUTPUT_FILE); 
    cout<<key_stroke<<endl; 
    return 0; 
} 
+3

請格式化您的代碼。 – Xiobiq

+3

你的代碼亂七八糟。正確清理它。我也不知道這個錯誤和你的代碼如何沒有適當的信息。 – Shiro

+0

我討厭成爲一個麻煩,但如果你刪除了不必要的空行,我們可以更好地幫助你。請這樣做,我會看看我能否幫助你... –

回答

1

%s格式指示符意味着相應的參數(傳遞給fprintf功能)預計指向char。您正在通過&key_stroke,即地址爲int - 因此發出此警告。

順便說一下在127後您的for (i = 8; i <= 190; i++)循環下一個值將是-128,因爲i被聲明爲char,除非你使用的編譯器設置,使得它unsigned char,你呢?

+0

@mvidelgauz ...你真的是一個成熟的人。您的建議和更正將會有所幫助。我將不得不重寫整個程序。這在朋友的Dev C++上運行得很好,但不會在我的CodeBlock上運行。我會在稍後發佈我的改進。我不是古茹,我想成爲像Polikdir和shiro.thanx這樣的人。 –