首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

sizeof()与strlen()区别解决办法

2012-03-28 
sizeof()与strlen()区别形如这道函数:p(char*)malloc(100)printf(aa-%d\n,strlen(p))//输出aa-110pri

sizeof()与strlen()区别
形如这道函数:
  p=(char*)malloc(100);
printf("aa-%d\n",strlen(p));//输出aa-110
printf("bb-%d\n",sizeof(p));//输出bb-4
这是怎么回事(110怎么回事),同时各位请详细说说sizeof()和strlen()计算变量大小区别。

[解决办法]
110内存数据未初始化,所以结果可能是任何值。
sizeof根据类型计算的。 char*类型 一般就是4了。
[解决办法]
strlen 是从头开始算,直到找到一个\0为止

你分配内存之后,没有初始化,其中的数据是随机的,不确定哪儿有一个\0
[解决办法]
sizeof(p)
p是一个指针 类型为int型的占4个字节。
strlen(p)
计算大小时遇到'\0'停止。

但为什么是110我也不知道。
[解决办法]
sizeof 是计算一个类型的大小,编译时就确定了

参考 sizeof_百度百科
[解决办法]
sizeof 是计算一个类型的大小,编译时就确定了

参考 sizeof_百度百科
[解决办法]
sizeof是个关键字,不是函数,用来测量数据类型大小,而strlen()是个测量字符串长度的函数,不包括'\0'
在内。。。
[解决办法]

探讨

可是strlen不也是用来计算其所占内存的大小的吗?

[解决办法]
sizeof为关联字strlen()是函数
[解决办法]
1. sizeof是操作符, strlen是函数
2. sizeof的操作数是数据类型,strlen的参数是字符串
[解决办法]
探讨

引用:

110内存数据未初始化,所以结果可能是任何值。
sizeof根据类型计算的。 char*类型 一般就是4了。

这样说的和这个例子又有冲突了:
double data[10] = {0};
int dataSize = sizeof data / sizeof data[0];//输出10
因为按照楼上的说法sizeof是用来计算类型大小的……

[解决办法]
探讨
这样说的和这个例子又有冲突了:
double data[10] = {0};
int dataSize = sizeof data / sizeof data[0];//输出10
因为按照楼上的说法sizeof是用来计算类型大小的……

[解决办法]
malloc仅仅是在堆上分配指定大小的内存空间,并不对内存进行初始化,内存的内容是随机的。如果想把申请到的内存初始化为0,那么应该使用calloc函数;或者malloc后进行memset。
strlen函数仅仅是以'\0'为依据停止计算字符的个数的,与是否内存越界无关。
malloc和strlen从来就没有关系。

你在9楼的程序片段里清楚的写着
[code=c/c++]double data[10] = {0};[/code]
这里data怎么会是指针?明显的是数组。sizeof(data)当然可以计算出数组占用的内存空间的大小。
而p自始至终就是一个指针,占4字节,虽然它可以指向一个数组或者一片连续的内存区域,但他终归不是数组或者一片连续的内存区域。
数组名虽然也是一个地址,和指针类似,但这两者是不一样的。其它区别:指针的值是可以更改的,但数组名不能把值改成其它值。比如你先double data[10]={0};然后data=(double*)malloc(sizeof(double)*10);这是不可以的。
[解决办法]
同样的,sizeof和strlen也是一毛钱关系都没有。
C/C++ code
#include <stdio.h>#include <string.h>int main(void){    char c[10]="hello";    printf("sizeof(c)=%d\n", sizeof(c)); /* 10 */    printf("strlen(c)=%d\n", strlen(c)); /* 5  */    return 0;}
[解决办法]
strlen计算的就是以'\0'结尾的字符串的长度。strlen从来没有计算内存大小的功能,那都是你想象的。哪本书也没这么讲。
[解决办法]
一个编译器求解的,一个执行期求解的,基本没关系。
我能想到的唯一会把两函数混用的情况就是
char a[] = "hello";
则sizeof(a)==strlen(a)+1
[解决办法]
探讨

引用:

110内存数据未初始化,所以结果可能是任何值。
sizeof根据类型计算的。 char*类型 一般就是4了。



这样说的和这个例子又有冲突了:
double data[10] = {0};
int dataSize = sizeof data / sizeof data[0];//输出10
因为按照楼上的说法sizeof是用来计算类型大小的……


[解决办法]
sizeof与类型相关
如果没初始化 strlen会找不到结束符'\0'
[解决办法]
找一篇文章好好看看吧,区别还是不小的,这里回复的也只是一星半点而已,不过重要的是回复了,细微的还是自己百度一篇文章吧
[解决办法]
sizeof()与strlen()区别可涉及到int,char,结构体,当然最多的是int和char,strlen最多用于char,不过也可以有人用int做参数,

热点排行