2014-10-17 93 views
2

我不知道爲什麼當我的變量和返回值匹配時我得到這個警告。我已經粘貼了以下變量賦值該變量的一個函數和函數本身(返回值和所有)C - 警告:賦值使得整型指針沒有轉換

char * menuMsg;   /* used to print menu options */ 

menuMsg = printMenu(); 

char * printMenu() 
{ 
    static char message[250] = "Select an option from below:\n"; 
    strcat(message, "(1) List all files on server\n"); 
    strcat(message, "(2) Retrieve file from server\n"); 
    strcat(message, "(3) Retrieve all files from server\n"); 
    strcat(message, "Enter your selection: "); 
    return message; 
} 

任何線索,爲什麼我會收到這個錯誤?對我來說,他們都列出了類型聲明的條款。

+6

您是否在定義之前有'printMenu'聲明? – wolfPack88 2014-10-17 12:54:17

+0

@ wolfPack88不,我完全忘了。我已經包括它現在和它的作品 – 2014-10-17 13:05:04

回答

6

發生這種情況是因爲您在聲明函數之前調用了該函數。假定未聲明的函數返回int,這解釋了錯誤。

移動printMenu()定義函數之前在做呼叫,或添加原型:

char * printMenu(void); 

並確保您添加void()是錯誤的,不接受參數的函數。

此外,由於每次調用printMenu()時您的代碼都會中斷,因此它會調用strcat()四次,導致菜單文本增大並增大,最終導致緩衝區溢出。

4

請包括這些線在你的代碼的頂部:

#include <string.h> 
char * printMenu(); 

在未來,請包括一個完全編譯的測試案例。

相關問題