c语言 字符数组 字符指针 sizeof strlen 的区别

直接给代码char*c="abcdef";chard[]="abcdef";chare[]={'a','b','c�... 直接给代码 char *c="abcdef"; char d[]="abcdef"; char e[]={'a','b','c','d','e','f'}; printf("sizeof(c):%d\tstrlen(c):%d\n",sizeof(c),strlen(c)); printf("sizeof(d):%d\tstrlen(d):%d\n",sizeof(d),strlen(d)); printf("sizeof(e):%d\tstrlen... c',sizeof(c); printf("sizeof(c):%d\,':%d\n"tstrlen(c):%d\n";b'; char e[]={'abcdef",'f'tstrlen(e):%d\,这些数据在内存中怎么存放,机器读取时候的机制,谢谢;,',sizeof(e),strlen(c)); printf("a':%d\tstrlen(d);abcdef"sizeof(d);,',strlen(e)); 输出结果是 4 6 7 6 6 14 求原因,最好是把根本原因说出来;,sizeof(d),strlen(d));d'; char d[]="};n"; printf("sizeof(e):%d\直接给代码 char *c=",'e' 展开 展开
 我来答
邶心赏灿
2019-12-18 · TA获得超过3563个赞
知道大有可为答主
回答量:3074
采纳率:28%
帮助的人:215万
展开全部
  简单概括,strlen()返回的是字符数组或者字符指针中的元素个数,sizeof返回的是字符数组中所有元素所占的总字节数,对于字符指针,返回的只是指针所占的字节数,32位系统上都是4字节。具体来说有如下几点区别:
  1.
sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned
int类型。该类型保证能容纳实现所建立的最大对象的字节大小。
  2.
sizeof是算符,strlen是函数。
  3.
sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。
  4.
数组做sizeof的参数不退化,传递给strlen就退化为指针了。
  5.
大部分编译程序在编译的时候就把sizeof计算过了,是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因。
  char
str[20]="0123456789";
//
str是编译期大小已经固定的数组
  int
a=strlen(str);
//
a=10;
//strlen()在运行起确定,计算的是实际长度
  int
b=sizeof(str);
//
而b=20;
//sizeof()在编译期确定,str的类型是int[20],计算的是占据内存的大小
  6.
strlen的结果要在运行的时候才能计算出来,是用来计算字符串的实际长度,不是类型占内存的大小。
  7.
sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
  char
c;
  sizeof
c;
//变量名可以不加括弧
  8.
当适用于一个结构类型或变量,
sizeof
返回实际的大小,
  当适用一静态地空间数组,
sizeof
归还全部数组的尺寸。
  sizeof
操作符不能返回动态地被分派了的数组或外部的数组的尺寸
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式