-
- nullah
- (大山.mumu)
- 等 级:
- 结帖率:
|
楼主发表于:2008-11-14 09:48:35
在遍历字符串的时候
C/C++ code
-
char *a = "abcde";
while(*a != '/0')
{
}
while(a != "/0")//这样要出界 为什么
{
}
//'/0'表示一个字符
//那"/0"呢 表示NULL 还是?
| | | |
|
|
#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)
| | |
|
|
#4楼 得分:0回复于:2008-11-14 09:54:55
如果"/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
|
|
|
#7楼 得分:0回复于:2008-11-14 09:59:22
空串也是字符串。
我认为:第一个strlen函数的结果为0,所以输出0.而while循环的初始条件就不成立,跳过。
故while内部的语句没有执行。
请lz自己验证一下吧。
| | |
|
|
#8楼 得分:0回复于:2008-11-14 10:00:38
那while循环遍历呢?
| | |
|
|
#9楼 得分:0回复于:2008-11-14 10:02:39
那你的意思是"/0"长度应该是2
而当while判断时 首字符是'/0'导致 条件不成立
| | |
|
|
#10楼 得分:0回复于:2008-11-14 10:09:31
C语言字符串以'/0'为结束符
所以"/0"长度应该是0
确实是while判断时 首字符是'/0'导致 条件不成立
基本概念,lz应多看书,呵呵
| | |
|
|
#11楼 得分:0回复于:2008-11-14 10:15:17
定义一个字符串,C语言会自动在末尾加上个'/0'
而对于"/0" c语言会判断已经有'/0' 就不会在末尾再添加'/0'
这样说 OK?
| | |
|
|
#12楼 得分:0回复于:2008-11-14 10:22:25
很多标准答案了
| | |
|
|
#13楼 得分:0回复于:2008-11-14 10:23:53
up...
| | |
|
|
#14楼 得分:0回复于:2008-11-14 10:26:19
|
|
|
#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))不为空.