1

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

这是我的代码,但我不确定我是否正确,有人可以验证吗?参数passedargv1passedargv2函数内部是从函数传递argv[1]的。基本上我想制作and就好像它们只是普通数组一样,但我不提前知道我们输入的大小,所以我不能预先初始化和. 另外,我不能改变里面的东西,所以我不能只指向它们,因为我以后需要改变它们。argv[2]main()chararray1=argv[1]chararray2=argv[2]charchararray2chararray2argvchararray1chararray2

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));
4

2 回答 2

2
  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()以确保您有记忆。

于 2013-09-14T04:49:12.780 回答
0

替换sizeofstrlen并记住包含string.h. cast因为指针的大小总是等于 4。而且调用 malloc 时不需要使用 a 。

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

编辑:
malloc 的原型:
void* malloc (size_t size); 它返回一个指针,void*该指针可以转换为所需的数据指针类型,以便可取消引用。由于您已经定义了chararray1and chararray2as char*,因此可以省略强制转换。

于 2013-09-14T04:55:11.697 回答