首页 > 解决方案 > 字符串的typedef char指针分配

问题描述

我试图理解一个代码,typedef char *我应该为字符串分配足够的内存"Pointer of""Redundancy".

#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>

typedef char* DString;
DString dstring_initialize(const char* str);

int main(void)
{
    DString str1, str2;
    str1 = dstring_initialize("Pointer of ");
    str2 = dstring_initialize("Redundancy ");
return 0;
}

DString dstring_initialize(const char* str)
{
  str = malloc((strlen(str)+1)*sizeof(DString));//mycode 
  return str;//mycode
}

我 100% 确定我做错了。我唯一应该做的就是改变它所说的部分mycode。它是这样发送给我的,但正如我之前所说,我不知道它是如何工作的,如果有人可以详细解释给我,我将不胜感激

标签: cstringpointersmallocdynamic-memory-allocation

解决方案


在下面的代码中,您分配了太多内存:

str = malloc((strlen(str)+1)*sizeof(DString));//mycode 
                             ^^^^^^^^^^^^^^
                             Not needed

您还将返回值从分配给malloc输入参数,即您“销毁”输入。

此外,您永远不会将输入字符串的值复制到分配的内存中。

而不是上面的,你需要:

char* res = malloc(strlen(str) + 1);
if (res != NULL)
{
    strcpy(res, str);
}
return res;

推荐阅读