黑马程序员技术交流社区
标题:
关于字符串和char类型数组
[打印本页]
作者:
Silent_memory
时间:
2014-3-15 00:27
标题:
关于字符串和char类型数组
本帖最后由 Silent_memory 于 2014-3-25 22:58 编辑
char args2[] = {'j','A','c'};
printf("%li\n", strlen(args2));
char args3[] = "jAc";
printf("%li\n", strlen(args3));
帮我看下 上面两个输出的结果是不一样的一个是 4 一个 3 我不是很理解为什么?明白的给我解释下?谢了。
还有就是 这个 arg2 和arg3 那个可以看做是字符串?
作者:
脸皮猴
时间:
2014-3-15 08:59
char args2[] = {'j','A','c'};//这个初始化后面你没有加'\0'
printf("%li\n", strlen(args2));//因为你用的strlen求的长度,所以这个你求出的值不是固定的!他会一直找到一个'\0'才会结束!假如你用sizeof那么肯定出来是3!你去看看关于strlen和sizeof的区别吧·论坛里有人问过!
char args3[] = "jAc";//这个初始化后面自动加了一个'\0'
printf("%li\n", strlen(args3));
作者:
lixiangzhou
时间:
2014-3-15 09:10
本帖最后由 lixiangzhou 于 2014-3-15 09:14 编辑
我试了下你的程序,输出结果:
3
3
并非4,3
内存地址是由高开始分配的,先给arg2分配三个字节,再给arg3分配4个字节,具体如下:
6EBD1C95-8D49-4934-A0A4-D7AB843118E1.png
(33.56 KB, 下载次数: 9)
下载附件
2014-3-15 09:07 上传
由于strlen在遇到\0时会终止计算字符的数目,所以结果是3,3
作者:
apple_victor
时间:
2014-3-15 15:28
char args2[]={'j','A','c'};
这个初始化的时候你没有加'\0';所以printf("%li\n",strlen(args2));的长度不一致,我在没有添加'\0'的时候打印出来的是9,不添加'\0'的话,打印的结果不一致。
char args3[] = "jAc";
printf("%li\n", strlen(args3));此句是没有问题的,打印的结果为3,。
另外你可以直接看看sizeof()和strlen()这两个函数的区别与联系
作者:
keycola
时间:
2014-3-15 20:51
本帖最后由 keycola 于 2014-3-15 20:54 编辑
没有加'\0' 的,不能说是字符串
分析: char args2[] = {'j','A','c'};
这条语句,你用的是单个存放,相当于
args2[0] = 'j'
args2[1] = 'A'
args2[2] = 'c'
后面是没有数据的,也就是只分配给 args2 3个char 空间,也就是空间的连续上度是 3
这些数据是放在内存中的,由于你用的strlen()这个函数,是要以'\0' 这个字符为结尾
才会是正确计算字符的长度,否则在每个电脑上运行的结果会是不同的,有的电脑会出现
内存读写错误
而:
char args3[] = "jAc";
由于是用的 "" 这样的表示,这编译会自动认为这是字符串,会自动开辟4个char空间
第4个char 空间是存放'\0' 的,strlen()这个函数不会放这个'\0' 字符计算在内,所以是
长度是3
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2