2014-04-23 37 views
2
#include<stdio.h> 
#include<conio.h> 
int main() 
{ 
    char *p=malloc(100); 
    clrscr(); 
    printf("enter your name\n"); 
    scanf("%s",p); 
    printf("%s",p); 
    getch(); 
    return 0; 
} 

當編譯此C程序「非便攜式指針轉換」警告正在發生......警告的原因是什麼?非便攜式指針轉換警告

+0

你用什麼編譯器編譯它,並用什麼標誌/選項? –

+2

添加'#include ',是警告還在嗎? –

+0

並在哪一行發生錯誤? –

回答

8

警告已解決。爲什麼會發生此警告?請解釋..?

您錯過了malloc的原型,因此編譯器假定返回類型爲int

char *p=malloc(100); 

分配的intchar*給出了警告。在編譯器中它們的大小相同,但它們在任何地方的大小都不相同。

當您添加原型(在您的案例中包括stdlib),編譯器會被告知返回類型mallocvoid*void*是一種指針類型,可以在沒有強制轉換的情況下分配給任何其他指針類型。

+0

謝謝你的解釋,先生... –