null和\0的区别

banmiton 2009-06-08 05:46:33
在字符数组中,以null结尾和\0结尾相同吗?或者说字符串的结尾是不是也可以用null结尾?
...全文
661 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

C/C++ code
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("%d\n%d\n",sizeof('\0'),sizeof(NULL));
return 0;
}
结果:
1
4
[/Quote]

我的结果是:
4
4
编译器:vc 6.0
东莞某某某 2009-06-13
  • 打赏
  • 举报
回复
2个不同的助记符 值同为0 这没啥讨论的
OphoneOu 2009-06-13
  • 打赏
  • 举报
回复
Code complete, Solid Code这类书会说明这种问题..
a88833324 2009-06-13
  • 打赏
  • 举报
回复
学习了
bclife 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 liyanhong5201314 的回复:]
是ds0101的朋友啊
[/Quote]
哦 想起来了 我们的论坛一直没弄起来 实在对不起各位朋友了
liyanhong5201314 2009-06-12
  • 打赏
  • 举报
回复
是ds0101的朋友啊
bclife 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 liyanhong5201314 的回复:]
引用 38 楼 bclife 的回复:


引用 35 楼 liyanhong5201314 的回复:
引用 34 楼 bclife 的回复:
发错了:


你是cadmcal吧? 不记得你名字怎么写了 呵呵


这都让你猜到了 怎么知道的?



你的头像似曾相识 很亲切 呵呵
[/Quote]
我看你也眼熟 是不是bccn的朋友啊
liyanhong5201314 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 bclife 的回复:]


引用 35 楼 liyanhong5201314 的回复:
引用 34 楼 bclife 的回复:
发错了:


你是cadmcal吧? 不记得你名字怎么写了 呵呵


这都让你猜到了 怎么知道的?
[/Quote]

你的头像似曾相识 很亲切 呵呵
bclife 2009-06-12
  • 打赏
  • 举报
回复

[Quote=引用 35 楼 liyanhong5201314 的回复:]
引用 34 楼 bclife 的回复:
发错了:



你是cadmcal吧? 不记得你名字怎么写了 呵呵
[/Quote]
这都让你猜到了 怎么知道的?
nwpulei 2009-06-12
  • 打赏
  • 举报
回复
学习 呵呵
liyanhong5201314 2009-06-12
  • 打赏
  • 举报
回复
NULL is a macro defined in several standard headers, 0 is an integer constant, '\0' is a character constant, and nul is the name of the character constant. All of these are *not* interchangeable:

NULL is to be used for pointers only since it may be defined as ((void *)0), this would cause problems with anything but pointers.

0 can be used anywhere, it is the generic symbol for each type's zero value and the compiler will sort things out.

'\0' should be used only in a character context.

nul is not defined in C or C++, it shouldn't be used unless you define it yourself in a suitable manner, like:

#define nul '\0'

bclife 2009-06-10
  • 打赏
  • 举报
回复
发错了:
bclife 2009-06-10
  • 打赏
  • 举报
回复
凑个热闹:
liyanhong5201314 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 bclife 的回复:]
发错了:
[/Quote]

你是cadmcal吧? 不记得你名字怎么写了 呵呵
zhouzhipen 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 kernelshell 的回复:]
实际上‘\0’是在用户输入后,由编译系统自动加载字符串末尾作为字符串结束的标记,你这么往里加一个元素'\0’,那么我想系统还是要自动加一个\0在末尾对不对?
[/Quote]

'\0'也是一个字符元素,字符串只是一个字符数组,你加多少个都可以,只要不越界就行了.
有时候初始化一个字符串也可以这样,
char aaa[100];
memset(aaa,'\0',100);

也就是说在aaa中所有的元素都是'\0',因为编译系统是以'\0'作为字符串末尾的识别符号,所以这个字符串长度为零.
jeff_nie 2009-06-09
  • 打赏
  • 举报
回复
请参考《C专家编程》第29页的下面这段话
一个'L'的NUL用于结束一个ACSII字符串
两个'LL'的NULL用于表示什么也不指向(空指针)
如果出现了三个'LLL'的NULLL,那就是检查一下有没有拼写错误了
ACSII字符中零的位模式被称为NUL;表示哪也不指向的特殊的指针值则是NULL。这两个术语不可互换
kernelshell 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zhouzhipen 的回复:]
C/C++ code
char aaa[10];
char bbb[10];
aaa[0]='x';
aaa[1]='x';
aaa[2]='x';
aaa[3]='x';
aaa[4]='\0';

bbb[0]='x';
bbb[1]='x';
bbb[2]='x';
bbb[3]='x';
bbb[4]=NULL;

bool beq=(aaa[4]==bbb[4]);//两个字符比较,beq=为真,字符相等.(说明NULL=='\0')
strcmp(aaa,bbb);//两个字符串比较,字符串相等.(说明在语法上没有错误!)




只是在实际中不提倡这种做法而已,但是这样做并没有什么语法错误.
[/Quote]
实际上‘\0’是在用户输入后,由编译系统自动加载字符串末尾作为字符串结束的标记,你这么往里加一个元素'\0’,那么我想系统还是要自动加一个\0在末尾对不对?
piginthetree 2009-06-09
  • 打赏
  • 举报
回复
楼主说的是NUL而不是NULL吧

NUL只是ASCII码表的一个助记符,它实际代表 0x00
而'\0'的值也是0x00
所以两者的值是相同的,但是编写代码时不能用NUL这个助记符来表示'\0',因为c语言里面没有这个东西啊

NULL是个宏定义 一般定义成0 用来表示指针为空
booksoon 2009-06-09
  • 打赏
  • 举报
回复
只要想着null是空指针,/0是空字符就可以了
sui_yuan_zhe 2009-06-09
  • 打赏
  • 举报
回复
不同的
加载更多回复(26)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧