读书人

NULL,\0区别解决思路

发布时间: 2012-03-09 16:54:57 作者: rapoo

NULL,'\0'区别
'\0' 的值是0

NULL 在vc中也是0


strlen(NULL) 程序会出错

strlen("\0'")不会


问题2:

C/C++ code
char * __cdecl strcpy(char * dst, const char * src){        char * cp = dst;        while( *cp++ = *src++ )                ;               /* Copy src over dst */        return( dst );}


其中的while这句代码 编译器是怎么处理的

字面意思是:先赋值,然后++, cp++ ,strc++, 那个++再前呢? 哪个再后??

为什么赋值后,还会做一次,判断是否为'\0'呢??



[解决办法]
'\0'是char不是0
NULL是常数0
[解决办法]
探讨
前++的优先级比后++高

*的优先级比后++高


做完之后,还会判断while( 是真,是假)



对于第一个问题,我还是不懂,'\0'的值是0啊, 在ascii码中



引用:

cp++ ,strc++运算符优先级相同从左到右

[解决办法]
strlen(NULL) 程序会出错
答:因为你传递的NULL是地址0,引起非法地址访问

strlen("\0'")不会
答:"\0'" 这个字符串在编译链接以后,在程序中是有一块内存的,也就是有实际的存储空间,当然不会引起错误

总之,这两个问题不是同一性质的,一个的内存地址编号为0,一个是内存中的内容为“\0”
[解决办法]
0不0的不是重点,重点是类型不一样

int的0 和int*的0都是0,但是意义不一样 一个是数值类型代表数值,一个是指针类型代表地址0

读书人网 >C语言

热点推荐