鱼C论坛

 找回密码
 立即注册
查看: 2844|回复: 3

神马回事

[复制链接]
发表于 2012-1-9 20:18:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <string.h>
#include<stdio.h>
int main(void)
{       
        int m,n;
               
        char a[] = "xyz" ,b[]={'x','y','z'};
       
        m=strlen(a);
        n=strlen(b);
        printf("%d %d\n",m,n);
        return 0;
}

怎么第二个的长度测出是7  ??

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-9 20:47:13 | 显示全部楼层
呃,菜鸟不懂,来了还是回复下
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-9 20:55:59 | 显示全部楼层
这个问题讲起来很复杂,要从内存角度跟你讲

首先

        char a[] = "xyz";
        char b[] = {'x','y','z'};

按照规定(就是这么规定的,别问我为什么), b在栈中会在b的上面
内存布局如下
0012FF38  78 79 7A CC  xyz.    这里是b的
0012FF3C  78 79 7A 00  xyz.    这里是a的
那么b的xyz后面的cc是什么呢? 这个是编译器规定的内存对齐(可以改编译选项), 4字节对齐,这样是为了提高寻址效率,具体的请百度
那strlen的时候会遇到 \0 也就是 00 结束,那就有意思了 , 连 a 的一起计算了 所以.就是7个了 ,当然你的写法是有问题的,你应该用 sizeof(b) 来求数组长度,啊又哦kei?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-9 20:57:21 | 显示全部楼层
补充 那个 对齐的 cc 是在debug模式下才有的  release模式下不确定是什么,可能是任何数值.也可能是00
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-10 18:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表