int main()
{
char* str=NULL;
scanf("%s",str);
printf("%s\n",str);
return 0;
}
以上编译时是没问题的,运行时显示非法内存访问,不知是什么原因。
9 个解决方案
#1
#include <stdio.h>
int main()
{
char* str=(char*)malloc(50);//申请一段内存先
scanf("%s",str);
printf("%s\n",str);
return 0;
}
#2
char* str=NULL;//没有分配内存
scanf("%s",str);//这时候往哪里写呢?往非法内存写,当然出错了
编译的时候,没有检验str指向的内存是否合法,这个检验在执行的时候才做的
所以,编译可以通过,执行时非法内存访问
scanf("%s",str);//这时候往哪里写呢?往非法内存写,当然出错了
编译的时候,没有检验str指向的内存是否合法,这个检验在执行的时候才做的
所以,编译可以通过,执行时非法内存访问
#3
指针无所指。
#4
F5
#5
没有申请内存空间啊!
只是这个指针指向NULL。
只是这个指针指向NULL。
#6
#7
#8
已经说的很清楚了。
#9
当你仅仅定义一个指针事,系统是不为其分配内存的,
#1
#include <stdio.h>
int main()
{
char* str=(char*)malloc(50);//申请一段内存先
scanf("%s",str);
printf("%s\n",str);
return 0;
}
#2
char* str=NULL;//没有分配内存
scanf("%s",str);//这时候往哪里写呢?往非法内存写,当然出错了
编译的时候,没有检验str指向的内存是否合法,这个检验在执行的时候才做的
所以,编译可以通过,执行时非法内存访问
scanf("%s",str);//这时候往哪里写呢?往非法内存写,当然出错了
编译的时候,没有检验str指向的内存是否合法,这个检验在执行的时候才做的
所以,编译可以通过,执行时非法内存访问
#3
指针无所指。
#4
F5
#5
没有申请内存空间啊!
只是这个指针指向NULL。
只是这个指针指向NULL。
#6
#7
#8
已经说的很清楚了。
#9
当你仅仅定义一个指针事,系统是不为其分配内存的,