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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lewisen 中级黑马   /  2014-4-19 17:09  /  1651 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lewisen 于 2014-4-29 19:15 编辑

#include <stdio.h>
#include <string.h>
int main()
{
    char st[20] = "hello\0\t\\";
    printf("%d %d\n",strlen(st),sizeof(st));
    return 0;
}
为何输出两数值不是相同的?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 愿我能 于 2014-4-19 18:09 编辑

sizeof(...)是运算符,而不是一个函数。strlen(...)是函数,要在运行时才能计算 参数可以是数组、指针、类型、对象、函数等。。参数必须是字符型指针(char*),计算到/0为止,所以字符串必须以/0结尾,不然会一直计算到/0
回复 使用道具 举报
strlen( )这个函数是用来计算字符串长度的,在计算字符串时遇到‘\0’就停止计数,所以strlen(st)的返回值是5,sizeof( )是用来计算数据类型长度的,一个字符占一个字节char[20]占20个字节,素以sizeof(st)的返回值是20。
回复 使用道具 举报
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char st[20] = "hello\0\t\\";
  6.     printf("%ld---- %ld",strlen(st),sizeof(st)/sizeof(char));
  7.     return 0;
  8.     //sizeof:是数组长度的计算sizeof(数组名)/sizeof(数组类型) = 数组的长度
  9.     //strlen:计算的是字符串的长度
  10. }
复制代码
回复 使用道具 举报
多谢各位解答。
回复 使用道具 举报
strlen( )是函数,用来计算字符串的字符数,不包括最后的‘\0’,且需要考虑汉子等情况,汉字占三个字符。sizeof()是一个关键字,用来计算变量和类型所占的字节数。
回复 使用道具 举报
strlen是读取字符串的长度,遇到\0后会停止输出,而sizeof是计算存入内存的字节数,\0的一样会读取字节。

char st[20] = "hello\0\t\\";
因为strlen遇到\0会停止,因此strlen读取的是hello的长度,就是5.
而sizeof读取所有的,就是hello\0\t\\   结果为8,\\代表转义\,占用了一个字节长度
回复 使用道具 举报
strlen() 读字符串长度,遇到\0停止,
而sizeof是计算字符串的字节数  
回复 使用道具 举报
使用strlen函数要求字符串必须是以''\0''结尾的。strlen返回它的长度但不包括‘\0’

2.sizeof可用于数据类型,使用形式:sizeof(type),数据类型必须用括号括住,如sizeof(int)。也可用于变量:sizeof(var_name)或sizeof var_name 

变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。 

注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

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