c - 字符串的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
。它是这样发送给我的,但正如我之前所说,我不知道它是如何工作的,如果有人可以详细解释给我,我将不胜感激
解决方案
在下面的代码中,您分配了太多内存:
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;
推荐阅读
- javascript - 如何使用 UI5 中的 IconPool 在对话框中选择图标
- aws-cdk - 有没有办法从秘密(或从 cdk)中获取秘密管理器秘密的 arn?
- reactjs - 不起作用“npx create-react-app my-new-app --typescript”
- html - 隐藏 iframe 滚动条但仍然可以滚动
- javascript - 如何解析为非默认 javascript 文件
- python-3.x - 如何在虚幻中将 Python 版本从 2.7 切换到 3.7
- android - 高级 RecyclerView 库 - 扩展示例
- java - JAR 文件构建不正确
- javascript - 仅使特定窗口处于活动状态,直到它在 js 中关闭
- angular - 使用 mergeMap 上传所有文件后启动 http 帖子