无意中发现一个关于strlen的问题。

heefly
无意中发现一个关于strlen的问题。

当我这样定义字符串时:char  s[3]={'a','b','c'}; 结果strlen(s)=8;而char s[4]={'a','b','c'},strlen(s)=3 没有问题
结果我又试了几个 .s[n]定义满时,结束的不是'/0'. 当n<8。strlen=8;
        n=8 strlen=12;
8<n<16  strlen=16
    n=16   strlen=20
后面的n又等于多少呢?为什么会这样啊。请指教!

heefly
补充一下,win32环境,vc 6.0

cugb_cat
你换台电脑,或者明天再试,可能就不是这个结果了

ruoyisiyu
你要搞清楚字符串数组和字符数组的区别
char p[3]={"abc"};不等同于char p[4]={"abc"}
还有strlen是字符串操作函数,注意'/0'

heefly
[quote]原帖由 [i]cugb_cat[/i] 于 2008-6-29 22:41 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8698975&ptid=1184028][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
你换台电脑,或者明天再试,可能就不是这个结果了 [/quote]

?????:outu: :outu: :outu: 什么原因?

cugb_cat
[quote]原帖由 [i]heefly[/i] 于 2008-6-29 22:42 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8698984&ptid=1184028][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]


?????:outu: :outu: :outu: 什么原因? [/quote]
取决于当时的内存状况~

ruoyisiyu
[quote]原帖由 [i]cugb_cat[/i] 于 2008-6-29 22:43 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8698989&ptid=1184028][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

取决于当时的内存状况~ [/quote]
本身就是他数组没有掌握好,strlen用的不对

heefly
[quote]原帖由 [i]ruoyisiyu[/i] 于 2008-6-29 22:42 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8698982&ptid=1184028][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
你要搞清楚字符串数组和字符数组的区别
char p[3]={"abc"};不等同于char p[4]={"abc"}
还有strlen是字符串操作函数,注意'/0' [/quote]

字符串数组和字符数组的区别?请讲。
难道是strlen不适合字符数组?

cugb_cat
[quote]原帖由 [i]ruoyisiyu[/i] 于 2008-6-29 22:44 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8698995&ptid=1184028][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

本身就是他数组没有掌握好,strlen用的不对 [/quote]
:mrgreen: :mrgreen: :mrgreen: :mrgreen:

lllaaa
[quote]原帖由 [i]heefly[/i] 于 2008-6-29 22:42 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8698984&ptid=1184028][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]


?????:outu: :outu: :outu: 什么原因? [/quote]

因为你char  s[3]={'a','b','c'};定义的不是字符串。strlen要往后数多少个字节才能遇到/0是不确定的。

204tian
strlen是遇到0才返回, 不遇到0绝不返回

heefly
谢谢了,好像懂了:em03:

ruoyisiyu
[quote]原帖由 [i]heefly[/i] 于 2008-6-29 22:50 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8699015&ptid=1184028][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
谢谢了,好像懂了:em03: [/quote]
看一下老谭的c吧,对你会很有帮助的

Godbach
了解一下strlen的C实现,就可以明白你使用中错误的地方了。

flw
[quote]原帖由 [i]Godbach[/i] 于 2008-6-30 10:38 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8700960&ptid=1184028][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
了解一下strlen的C实现,就可以明白你使用中错误的地方了。 [/quote]
我倒是觉得,不要动不动就去看它(们)的实现,
而是要搞清楚语义。

strlen 的语义是什么?是计算字符串的长度。
字符串的语义是什么?
是否任何一个字符型的数组或者指向字符序列的字符型指针都可以认为是一个字符串对象?
理解字符串到底是怎样一个东西,要比去看 strlen 怎么实现更加重要。

[[i] 本帖最后由 flw 于 2008-6-30 11:23 编辑 [/i]]

yecheng_110
[quote]原帖由 [i]flw[/i] 于 2008-6-30 11:07 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8701240&ptid=1184028][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

我倒是觉得,不要懂不懂就去看它(们)的实现,
而是要搞清楚语义。

strlen 的语义是什么?是计算字符串的长度。
字符串的语义是什么?
是否任何一个字符型的数组或者指向字符序列的字符型指针都可以认 ... [/quote]
赞同

tigerajs
回复 #1 heefly 的帖子

:mrgreen: :mrgreen:
这是字符串吗

lipingtababa
“无意中发现一个关于strlen的问题”

Godbach
[quote]原帖由 [i]flw[/i] 于 2008-6-30 11:07 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8701240&ptid=1184028][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

我倒是觉得,不要动不动就去看它(们)的实现,
而是要搞清楚语义。

strlen 的语义是什么?是计算字符串的长度。
字符串的语义是什么?
是否任何一个字符型的数组或者指向字符序列的字符型指针都可以认 ... [/quote]

版主讲的是一个方面。strlen的C实现也就一行代码,看了之后就可以明白计算字符串长度的结束标志。

当然,LZ还需要明白另外一个问题,那就是什么是字符串,以及和字符型数组有什么关系。

pizzx
Null-terminated string.