C语言里开辟内存空间后如何让指针返回内存首地址

2025-03-03 08:23:24
推荐回答(3个)
回答1:

你没在最后添加结束符'\0',修改如下

#include
#include
int main()
{
char *p1,*p2,*p3;
char *p=(char*)malloc(1000000);
p1=p;
p2=p;
p3=p2;
gets(p1);
while (*p1!='\0')
{
if(*p1!=' ')
{
*p2=*p1;
p2++;
}
p1++;
}
*p2='\0'; //加上这一句,添加字符串结束符
puts(p3);
return 0;
}

————————————————————————-
这种输出又不是没用过,没问题的,可以把代码贴上来,我试试
————————————————————————————
输出时用p3啊,
puts(p3);
或用printf也可以
——————————————————————————
汗,你声明一个char *p3,处理前让p3=p2不就行了

回答2:

  1. C语言中有三个分配内存的函数,malloc、malloc和readlloc函数。成功分配内存后,返回的都是内存首地址,失败返回的是NULL。

  2. 三个函数的声明分别是:
    void* realloc(void* ptr, unsigned newsize);
    void* malloc(unsigned size);
    void* calloc(size_t nelem, size_t elsize);
    都在stdlib.h函数库内

    原型:extern void *realloc(void *mem_address, unsigned int newsize);
    用法:#include
    功能:改变mem_address所指内存区域的大小为newsize长度。
    说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
            当内存不再使用时,应使用free()函数将内存块释放。

    原型:extern void *malloc(unsigned int num_bytes);
    用法:#include
    功能:分配长度为num_bytes字节的内存块
    说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
            当内存不再使用时,应使用free()函数将内存块释放。

    原型:extern void *calloc(int num_elems, int elem_size);
    用法:#include
    功能:为具有num_elems个长度为elem_size元素的数组分配内存
    说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
            当内存不再使用时,应使用free()函数将内存块释放。

    区别:
    1、calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据
    2、realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度

回答3:

你这里p就是开头