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

时间:2013-09-14 04:41:49

标签: c pointers memory memory-management

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

这是我的代码,但我不确定我是否正确使用了,有人可以验证吗?函数内的参数argv[2]passedargv1是从passedargv2函数传递的argv[1]argv[2]。基本上我想让main()chararray1=argv[1]好像只是简单的chararray2=argv[2]数组,但我不能提前知道输入的大小,所以我可以&#39 ; t预初始化charchararray2。另外,我无法更改chararray2内的内容,因此我无法指出argvchararray1,因为稍后我需要更改它们。

chararray2

2 个答案:

答案 0 :(得分:2)

  1. 请勿转发malloc()

  2. 的回报
  3. malloc(char*)malloc显然是错误的。

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

  5. 例如:

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

    然后大概是:

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

    不要忘记检查malloc()的回复,以确保记忆。

答案 1 :(得分:0)

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

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

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