c语言 NULL指针解决思路
c语言 NULL指针
前两天在看《c语言与指针》这本书时,突然想去了解NULL指针到底是什么?
我的理解:
很多函数,在开头都会对传入的指针参数做判断,判断它是否为空,因为对空指针的访问,会引发段错误。
所以,定义指针时,最好能将指针指向NULL,不指向NULL,指针的内容为一个随机值。
我的猜测:
那NULL指针是什么?NULL指针所指的位置又放着什么内容?
我的实验代码:
ubuntu 11.10 gcc
#include <stdio.h>
int main(int argc,char **argv)
{
char *str1 = NULL;
char *str2 = (char *)0;
printf("content of address 0 is %s\n",0); //打印结果:content of address 0 is (null)
printf("%s\n",0); //打印结果:(null)
printf("content of address 0 is %s\n",(char *)0); //打印结果:content of address 0 is(null)
//printf("%s\n",(char *)0); //段错误,为什么?
printf("str1 is %s\n",str1); //打印结果:str1 is (null)
//printf("%s\n",str1); //段错误
printf("str2 is %s\n",str2); //打印结果:str2 is (null)
//printf("%s\n",str2); //段错误
if(str1 == str2)
printf("NULL address is 0\n"); //打印结果:NULL adress is 0
return 0;
}
另外,我使用int指针做同样的实验,不能去取NULL指针指向的内容。
我的疑惑:
1.如果不能去取一个NULL指向的内容,那printf是如何打印出(null)的?
2.为什么%s前面有内容和直接打印%s的结果,是不一样的?
------解决方案--------------------
先
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express
右边Visual C++ 2010 Express下面的Select language...下拉选‘简体中文’,再按Install Now按钮
再参考
File: "C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\output.c"
293: char *__nullstring = "(null)"; /* string to print on null ptr */
1568: /* prints '(null)' if a null string is passed */
前两天在看《c语言与指针》这本书时,突然想去了解NULL指针到底是什么?
我的理解:
很多函数,在开头都会对传入的指针参数做判断,判断它是否为空,因为对空指针的访问,会引发段错误。
所以,定义指针时,最好能将指针指向NULL,不指向NULL,指针的内容为一个随机值。
我的猜测:
那NULL指针是什么?NULL指针所指的位置又放着什么内容?
我的实验代码:
ubuntu 11.10 gcc
#include <stdio.h>
int main(int argc,char **argv)
{
char *str1 = NULL;
char *str2 = (char *)0;
printf("content of address 0 is %s\n",0); //打印结果:content of address 0 is (null)
printf("%s\n",0); //打印结果:(null)
printf("content of address 0 is %s\n",(char *)0); //打印结果:content of address 0 is(null)
//printf("%s\n",(char *)0); //段错误,为什么?
printf("str1 is %s\n",str1); //打印结果:str1 is (null)
//printf("%s\n",str1); //段错误
printf("str2 is %s\n",str2); //打印结果:str2 is (null)
//printf("%s\n",str2); //段错误
if(str1 == str2)
printf("NULL address is 0\n"); //打印结果:NULL adress is 0
return 0;
}
另外,我使用int指针做同样的实验,不能去取NULL指针指向的内容。
我的疑惑:
1.如果不能去取一个NULL指向的内容,那printf是如何打印出(null)的?
2.为什么%s前面有内容和直接打印%s的结果,是不一样的?
------解决方案--------------------
先
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express
右边Visual C++ 2010 Express下面的Select language...下拉选‘简体中文’,再按Install Now按钮
再参考
File: "C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\output.c"
293: char *__nullstring = "(null)"; /* string to print on null ptr */
1568: /* prints '(null)' if a null string is passed */