黑马程序员技术交流社区
标题:
字符数组越界分析
[打印本页]
作者:
lyan
时间:
2014-10-5 02:11
标题:
字符数组越界分析
char chars[] = "12345678";
printf("%d\n",sizeof(chars)); // 9 这个毫无疑问8个字节+一个字节'\0'
printf("%d\n",strlen(chars)); // 8 这个也没问题,有几个字符长度就是几
char chars1[5] = "12345678";
printf("%d\n",sizeof(chars1)); // 5 这个也没问题,只定义了5个字节
printf("%d\n",strlen(chars1)); // 6 [color=Red]?这个想不明白[/color]
复制代码
结果:
9
8
5
6
复制代码
作者:
lyan
时间:
2014-10-5 02:12
代码里不能嵌套红色字体。。。。我晕
作者:
lyan
时间:
2014-10-5 14:10
顶上来
作者:
易孟飞
时间:
2014-10-5 15:01
你对strlen()这个函数的工作原理不是很了解,这个函数只考虑'\0',只要遇到'\0'就会结束计算长度
char chars1[5] = "12345678";
//这句代码会向操作系统申请5字节的内存,操作系统只能保证分配给你的这5个字节不被其他进程破坏。也就
//说你的只有12345,被操作系统存放在了这5个字节里。
printf("%d\n",sizeof(chars1)); // 5 这个也没问题,只定义了5个字节
printf("%d\n",strlen(chars1));
// 字符串都是都是以'\0'结尾,strlen(chars1也是寻找字符串的'\0'前有几个字符,有几个字符就会返回几,
由于你把第5五个字节存了’5‘,因此strlen()在寻找到第五字节时,没有结束,继续向下寻找'\0',可是操作系统只给你了5个字节,之后的字节不是你程序所在进程能够控制的(不属于你的进程),这部分是不确定的。谁也不知道下一个'\0‘在哪里,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2