【发布时间】:2013-09-14 04:41:49
【问题描述】:
我有一个程序要求使用argv 输入两个参数,然后我想使用argv[1] 和argv[2] 的长度为我的struct 中的两个指向char 的指针动态分配内存等于大小为argv[1] 和argv[2]。
这是我的代码,但我不确定我是否正确,有人可以验证吗?函数内部的参数passedargv1和passedargv2是从main()函数传递过来的argv[1]和argv[2]。基本上我想让chararray1=argv[1] 和chararray2=argv[2] 就像它们只是普通的char 数组一样,但我不提前知道我们输入的大小,所以我不能预先初始化chararray2 和@ 987654338@。另外,我无法更改 argv 内部的内容,因此我不能让 chararray1 和 chararray2 指向它们,因为我稍后需要更改它们。
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));
【问题讨论】:
-
如果您使用的是符合 POSIX 或 XOPEN 标准且具有
strdup()的系统,这会变得非常简单并且停止投射malloc()结果 -
哦,我的错,我会解决的,谢谢。但是 sizeof(passedargv1) 是这样吗?还是我需要将其设为 &passedargv1 因为它是一个指针?
-
那行不通。 sizeof(passedargv1) 应该是 4 或 8 字节(假设是 32 或 64 位系统)。即使取消引用它,它也不起作用,因为 sizeof() 参数是在编译时计算的。正如@WhozCraig 建议的那样, strdup() 可能是你最好的选择。
标签: c pointers memory memory-management