'/0'和"/0"的区别

  • nullah
  • (大山.mumu)
  • 等 级:
  • 结帖率:
楼主发表于:2008-11-14 09:48:35
在遍历字符串的时候
C/C++ code
char *a = "abcde";
while(*a != '/0')
{

}

while(a != "/0")//这样要出界 为什么
{

}
//'/0'表示一个字符
//那"/0"呢 表示NULL 还是?


 
 
回复次数: 15

 

  • wuyu637用户头像
  • wuyu637
  • (乱世藏大米(继续收藏中))
  • 等 级:
#1楼 得分:0回复于:2008-11-14 09:50:17
一个是字符串,一个是字符。

“”表示的是一个字符串,
‘’表示的是一个字符
 
#2楼 得分:5回复于:2008-11-14 09:51:35
"/0"表示一个地址,该地址处的内容为'/0' '/0'
'/0'表示一个NULL字符
 
#3楼 得分:0回复于:2008-11-14 09:54:14
类型不同,size不同printf(sizeof('a')/sizeof("a"))
NULL是0指针,#define NULL ((void*)0)
 
  • nullah用户头像
  • nullah
  • (大山.mumu)
  • 等 级:
#4楼 得分:0回复于:2008-11-14 09:54:55
引用 1 楼 wuyu637 的回复:
一个是字符串,一个是字符。

“”表示的是一个字符串,
‘’表示的是一个字符

如果"/0"是字符串那如何解释下面的结果
C/C++ code
            
            
char * a = " /0 " ; cout << strlen(a) << endl; while ( * a != ' /0 ' ) { cout << * a << endl; a ++ ; } // output: 0 // 按任意键接续....
 
#5楼 得分:5回复于:2008-11-14 09:55:50
'/0'表示一个字符
"/0"表示的是一个无名字符指针,指向的内容为NULL
两个字符指针比较时,比较指针指向的地址
无名字符指针指向的地址肯定不会是指针a指向的字符串的最好一个字节(NULL)
所以肯定会越界.
 
#6楼 得分:0回复于:2008-11-14 09:57:57
strlen(a) 为 0
循环根本不会执行
 
#7楼 得分:0回复于:2008-11-14 09:59:22
空串也是字符串。

我认为:第一个strlen函数的结果为0,所以输出0.而while循环的初始条件就不成立,跳过。
故while内部的语句没有执行。
请lz自己验证一下吧。
 
  • nullah用户头像
  • nullah
  • (大山.mumu)
  • 等 级:
#8楼 得分:0回复于:2008-11-14 10:00:38
引用 6 楼 lbh2001 的回复:
strlen(a) 为 0
循环根本不会执行

那while循环遍历呢?
 
  • nullah用户头像
  • nullah
  • (大山.mumu)
  • 等 级:
#9楼 得分:0回复于:2008-11-14 10:02:39
引用 7 楼 lostbyte2006 的回复:
空串也是字符串。

我认为:第一个strlen函数的结果为0,所以输出0.而while循环的初始条件就不成立,跳过。
故while内部的语句没有执行。
请lz自己验证一下吧。

那你的意思是"/0"长度应该是2
而当while判断时 首字符是'/0'导致 条件不成立
 
#10楼 得分:0回复于:2008-11-14 10:09:31
引用 9 楼 nullah 的回复:
引用 7 楼 lostbyte2006 的回复:
空串也是字符串。

我认为:第一个strlen函数的结果为0,所以输出0.而while循环的初始条件就不成立,跳过。
故while内部的语句没有执行。
请lz自己验证一下吧。

那你的意思是"/0"长度应该是2
而当while判断时 首字符是'/0'导致 条件不成立

C语言字符串以'/0'为结束符
所以"/0"长度应该是0
确实是while判断时 首字符是'/0'导致 条件不成立
基本概念,lz应多看书,呵呵
 
  • nullah用户头像
  • nullah
  • (大山.mumu)
  • 等 级:
#11楼 得分:0回复于:2008-11-14 10:15:17
引用 10 楼 lbh2001 的回复:
引用 9 楼 nullah 的回复:
引用 7 楼 lostbyte2006 的回复:
空串也是字符串。

我认为:第一个strlen函数的结果为0,所以输出0.而while循环的初始条件就不成立,跳过。
故while内部的语句没有执行。
请lz自己验证一下吧。

那你的意思是"/0"长度应该是2
而当while判断时 首字符是'/0'导致 条件不成立

C语言字符串以'/0'为结束符
所以"/0"长度应该是0
确实是while判断时 首字符是'/0'导致 条件不成立
基…

定义一个字符串,C语言会自动在末尾加上个'/0'
而对于"/0" c语言会判断已经有'/0' 就不会在末尾再添加'/0'
这样说 OK?
 
#12楼 得分:0回复于:2008-11-14 10:22:25
引用 2 楼 lbh2001 的回复:
"/0"表示一个地址,该地址处的内容为'/0' '/0'
'/0'表示一个NULL字符

很多标准答案了
 
#13楼 得分:0回复于:2008-11-14 10:23:53
引用 5 楼 ghostwcy 的回复:
'/0'表示一个字符
"/0"表示的是一个无名字符指针,指向的内容为NULL
两个字符指针比较时,比较指针指向的地址
无名字符指针指向的地址肯定不会是指针a指向的字符串的最好一个字节(NULL)
所以肯定会越界.

up...
 
  • cyj626用户头像
  • cyj626
  • (人在江湖,江湖却没有我的传说-)
  • 等 级:
#14楼 得分:0回复于:2008-11-14 10:26:19
up
 
  • aaajj用户头像
  • aaajj
  • (忆江南)
  • 等 级:
#15楼 得分:0回复于:2008-11-14 10:47:24
while(a != "/0")//这样要出界 为什么// strcmp(){

}
//'/0'表示一个字符
//那"/0"呢 表示NULL 还是?
 

 

 

 

 

总结: C风格字符串长度为0,一种是字符串指针为0,另一种是指针已设置,但是指针数组只包含一个空字符。

 

 "/0" 就是一个空字符串,包含'/0'.

空字符串在进行内部字符遍历时与'/0'比较,所以上面的程序在*p!="/0"就已经犯错.

 

在C风格的程序中要比较一个字符串是否为空,必须比较     (p||*p) 为空. (!p &&!(*p))不为空.

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值