#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 :(得分:8)
警告已解决..为什么会发生?请解释..?
您错过了malloc
的原型,因此编译器假定返回类型为int
。
char *p=malloc(100);
将int
分配给char*
会发出警告。显然它们在编译器中的大小相同,但它们的大小并不相同。
当你添加原型时(在你的情况下包括stdlib
),编译器被告知malloc
的返回类型是void*
。
void*
是一种指针类型,可以在没有强制转换的情况下分配给任何其他指针类型。