我有一个程序要求使用 argv
输入两个参数,然后我想使用 argv[1]
和 argv[2 的长度]
为我的 struct
中的两个指向 char
的指针动态分配内存,大小等于 argv[1]
和 argv[2]
.
这是我的代码,但我不确定我是否做对了,有人可以验证吗?函数内部的参数passedargv1
和passedargv2
是从传递过来的
函数。基本上我想让 argv[1]
和argv[2]
>main()chararray1=argv[1]
和 chararray2=argv[2]
就好像它们只是普通的 char
数组一样,但是我事先不知道我们输入的大小,所以我无法预初始化 chararray2
和 chararray2
。另外,我无法更改 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));
最佳答案
不要强制转换
的返回值malloc()
malloc(char*)malloc
显然是错误的。对于您的主要问题,
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/