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
[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不适合字符数组?
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是不确定的。
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]]
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还需要明白另外一个问题,那就是什么是字符串,以及和字符型数组有什么关系。