在 struct 中为 char 数组创建指针大小的内存

标签 c pointers memory memory-management

我有一个程序要求使用 argv 输入两个参数,然后我想使用 argv[1]argv[2 的长度] 为我的 struct 中的两个指向 char 的指针动态分配内存,大小等于 argv[1] argv[2].

这是我的代码,但我不确定我是否做对了,有人可以验证吗?函数内部的参数passedargv1passedargv2是从传递过来的argv[1]argv[2] >main() 函数。基本上我想让 chararray1=argv[1]chararray2=argv[2] 就好像它们只是普通的 char 数组一样,但是我事先不知道我们输入的大小,所以我无法预初始化 chararray2chararray2。另外,我无法更改 argv 中的内容,所以我不能让 chararray1chararray2 指向它们,因为我需要更改他们稍后。

struct StructInformation{

    char *chararray1;
    char *chararray2;
};



typedef struct StructInformation SimplifiedStruct;

SimplifiedStruct *CreateMem(char *passedargv1, char *passedargv2) {

SimplifiedStruct *ptr=(SimplifiedStruct*)malloc(sizeof(SimplifiedStruct));
ptr->chararray1=(char*)malloc(sizeof(passedargv1));
ptr->chararray2=(char*)malloc(sizeof(passedargv2));

最佳答案

  1. 不要强制转换 malloc()

    的返回值
  2. malloc(char*)malloc 显然是错误的。

  3. 对于您的主要问题,sizeof(passedargv1)sizeof(passedargv2) 都只是评估为 sizeof(char *) ,所以不,您没有正确完成。您需要对两个参数调用 strlen(),并向每个参数添加 1,这将告诉您需要分配多少内存,假设您只是想要复制字符串。

例如:

ptr->chararray1 = malloc(strlen(passedargv1) + 1);
ptr->chararray2 = malloc(strlen(passedargv2) + 1);

然后大概是:

strcpy(ptr->chararray1, passedargv1);
strcpy(ptr->chararray2, passedargv2);

不要忘记检查 malloc() 的返回值以确保您有内存。

关于在 struct 中为 char 数组创建指针大小的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18798363/

相关文章:

c++ - 我怎样才能知道 C++ 类的一个实例消耗了多少内存?

c - 返回 C 中的局部变量混淆

c - 将数组元素传递给c中的函数

c++ - 常量数组和常量指针的重载函数

c - 将指针数组传递给 GTK 相关函数

python - 具有稀疏数据的列表比与 numpy 数组相同的数据消耗更少的内存

Docker 容器的内存消耗从不减少(或者是吗?)

c - 电梯程序有错误(段错误)

c - 获得 ECHO REPLY,其中包含从服务器到 nat 后面的客户端的数据

c++ - 我如何 "reset"一个缓冲区?