关于在C中分配字符指针的问题



我有一个简单的C程序,关于分配char指针和malloc,就像这个一样

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char str[] = "0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789";
    char* str1 = malloc(sizeof(char*));
    strcpy(str1, str);
    printf("%snn", str1);
    char* str2 = malloc(sizeof(char*));
    str2 = str1;    
    printf("%sn", str2);
    return 0;
}

结果是:

0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
0123456789 0123456789 01!

那么,为什么str2只从str1中获得25个字符呢?"!"(str2末尾)从哪里来?

你能帮我吗?谢谢

您没有分配足够的空间。sizeof(char *)是保存指针所需的内存量(与指针指向的位置无关)。

将两个malloc都更改为:malloc(sizeof str)malloc(strlen(str) + 1)

此外,str2 = str1会导致内存泄漏。它使指针str2指向str1所指向的位置,然后您就得到了malloc’d块,而没有任何指针指向它

在您的原始代码中,当您将不属于自己的内容写入内存时,任何事情都可能发生;尝试并调查为什么你会得到一些特定的垃圾而不是其他特定的垃圾,这并没有真正的用处。

您的sizeof是错误的,您是malloc,根据您的指针大小,您应该是malloc(sizeof(str),因为这就是您要复制到其中的内容。

另外,请注意,str2 = str1只是覆盖了str2指针,因此内存泄漏,因为str2初始化中的malloc丢失了。

相关内容

  • 没有找到相关文章

最新更新