非便携式指针转换警告

时间:2014-04-23 06:54:19

标签: c pointers

#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程序时“非便携式指针转换”警告正在发生。警告的原因是什么?

1 个答案:

答案 0 :(得分:8)

  

警告已解决..为什么会发生?请解释..?

您错过了malloc的原型,因此编译器假定返回类型为int

char *p=malloc(100);

int分配给char*会发出警告。显然它们在编译器中的大小相同,但它们的大小并不相同。

当你添加原型时(在你的情况下包括stdlib),编译器被告知malloc的返回类型是void*void*是一种指针类型,可以在没有强制转换的情况下分配给任何其他指针类型。