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

求一古老指针有关问题

2013-11-25 
求一古老指针问题void test4(){int ichar **p (char**)malloc(1000)int sum 0for(i0 i50 i++){p

求一古老指针问题
void test4()
{
int i;
char **p  = (char**)malloc(1000);
int sum = 0;
for(i=0; i<50; i++)
{
p[i] = (char *)malloc(i+1);
printf("p[%d]:%d\n", i, strlen(p[i]));
sum +=strlen(p[i]);
}
printf("sum: %d\n", sum);
for(i=0; i<50; i++)
free(p[i]);
}

int main(void)
{
test4();
return 0;
}

为什么将char **p  = (char**)malloc(1000);里的1000改为其他值,分配的空间会不一样,想用二维指针为每分配不连续的空间,想得到这样的结果:p[0] : 1     p[1] : 2  p[2] = 3……
不知哪里出错了,求大拿。。。 二维指针 strlen
[解决办法]
哪里不一样呢?


p[i] = (char *)malloc(i+1);
//这里没有清空或者赋值,直接strlen是得不到正确的长度的!
printf("p[%d]:%d\n", i, strlen(p[i]));

[解决办法]
strlen是计算到第一个'\0'的位置的,你没有指定'\0'在哪里,所以取得的长度是不对的,甚至会超过数组分配的长度所以就错了。
计算内存分配的大小应该用其他方法,改成这种就OK了:
printf("p[%d]:%d\n", i, _msize(p[i])/sizeof(char));

热点排行