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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© JiangHG 中级黑马   /  2015-3-16 10:25  /  1679 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:
char *str1  = "hello 测试";
NSLog(@"str1:%s size: %lu ",str1,strlen(str1));
这两行代码的输出结果:
2015-03-16 10:21:59.500 a.out[705:28759] str1: size: 12
为什么str1输出是空呢,而且大小12是怎么算出来的呢?

11 个回复

倒序浏览
char 不是字符么?
回复 使用道具 举报
首先你定义的是字符指针,输出方式错误。其次 "hello 测试" 一个字符是一个字节,一个汉字是三个字节,再加上中间那个空格 加起来就是12,你再好好数数。
回复 使用道具 举报
前一个问题不知道,后一个问题:一个汉字三个字符hello(5)+空格(1)+汉字(2*3)= 12
回复 使用道具 举报
Damson 发表于 2015-3-16 11:26
首先你定义的是字符指针,输出方式错误。其次 "hello 测试" 一个字符是一个字节,一个汉字是三个字节,再加 ...

请问下,输出方式,怎么错了?你的意思是用%@?
回复 使用道具 举报
yafengxn 发表于 2015-3-16 11:33
请问下,输出方式,怎么错了?你的意思是用%@?

字符指针 存的是地址,要把字符数组和字符指针区分开,你查下资料就晓得了,或者C语言学习视频中都有的。
回复 使用道具 举报
Damson 发表于 2015-3-16 11:26
首先你定义的是字符指针,输出方式错误。其次 "hello 测试" 一个字符是一个字节,一个汉字是三个字节,再加 ...

输出方式怎么错误了,%@肯定是不对的都编译不过,难到C语言的字符串只能用printf输出吗。
回复 使用道具 举报
Damson 发表于 2015-3-16 11:37
字符指针 存的是地址,要把字符数组和字符指针区分开,你查下资料就晓得了,或者C语言学习视频中都有的。 ...

存的的就是那个字符串的地址吗,之后把这个地址里面的东西写到缓冲区在打印到屏幕,用printf都是没有问题的!
回复 使用道具 举报
关于第一个问题好像是你输出的字符串中包含了中文,我记得看视频中有这样的情况出现。第二个问题就简单多了,strlen(str1)方法返回的是str1的长度,前面的大婶们说得很明白了
回复 使用道具 举报
一个汉字是3个字节 测试是6个字节
字母一个是一个字节 加上空格是6个字节
回复 使用道具 举报
方法一:用printf输出字符串
方法二:用NSString创建字符串,然后再用NSLog输出
回复 使用道具 举报
yyx1992 发表于 2015-3-16 19:16
方法一:用printf输出字符串
方法二:用NSString创建字符串,然后再用NSLog输出 ...

嗯,已经解决了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马