A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhs 中级黑马   /  2014-7-8 11:38  /  1247 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zhs 于 2014-7-8 15:34 编辑

#include <stdio.h>
#include <string.h>
int main()
{
     char name[]="test";
     char name1[2]={'o','k'};
     int size=strlen(name1);
     printf("%d\n",size);
}
输出结果为6。
我疑问的是,如果执行下面这段代码,会输出几呢,因工作没带mac,请有条件的童鞋帮忙运行一下
#include <stdio.h>
#include <string.h>
int main()
{
     char name[4]="test";
     char name1[2]={'o','k'};
     int size=strlen(name1);
     printf("%d\n",size);
}

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

4 个回复

倒序浏览
帮你在xcode里面运行了下,上面代码的结果是6,不是7.而下面的代码的结果是12
回复 使用道具 举报
name1字符数组的长度只有2,所以'\0'就放不下了。strlen一直会找到下一个'\0'才停止,所以输出结果是不确定的。搞不好访问到了没有权限访问的地址还会segmentation fault
回复 使用道具 举报
第一段代码 char name[] ="text";Xcode会默认数组长度为5,最后加了一个\0, 所以用strlen函数会从地址name1开始找到结束字符\0,总共遍历了oktext这6个字符,输出长度为6.
第二段代码 char name[4]="text", 数组里根本没有字符\0,strlen函数从地址name1开始不会在最后一个字符t结束,会继续遍历后面的地址里的内容,最后可能出现的结果就跟楼上说的出现segmentation fault,输出长度不确定。

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
噢,谢谢各位
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马