#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;
}
Run Code Online (Sandbox Code Playgroud)
编译这个c程序时"非便携式指针转换"警告正在发生.警告的原因是什么?
警告解决了......为什么会发生?请解释..?
您缺少原型malloc,因此编译器假定返回类型为int.
char *p=malloc(100);
Run Code Online (Sandbox Code Playgroud)
分配int给a char*会发出警告.显然它们在编译器中的大小相同,但它们的大小并不相同.
当您添加原型时(在您的情况下通过包含stdlib),编译器被告知返回类型malloc为void*.
void*是一种指针类型,可以在没有强制转换的情况下分配给任何其他指针类型.