我有一个程序,要求使用argv
输入两个参数,然后我想使用argv[1]
和argv[2]
的长度为{{1}的两个指针动态分配内存我的char
内部等于struct
和argv[1]
的大小。
这是我的代码,但我不确定我是否正确使用了,有人可以验证吗?函数内的参数argv[2]
和passedargv1
是从passedargv2
函数传递的argv[1]
和argv[2]
。基本上我想让main()
和chararray1=argv[1]
好像只是简单的chararray2=argv[2]
数组,但我不能提前知道输入的大小,所以我可以&#39 ; t预初始化char
和chararray2
。另外,我无法更改chararray2
内的内容,因此我无法指出argv
和chararray1
,因为稍后我需要更改它们。
chararray2
答案 0 :(得分:2)
请勿转发malloc()
malloc(char*)malloc
显然是错误的。
对于您的主要问题,sizeof(passedargv1)
和sizeof(passedargv2)
都只评估为sizeof(char *)
,所以不,您没有正确完成。您需要在两个参数上调用strlen()
,并为每个参数添加1
,这将告诉您需要分配多少内存,假设您只想复制字符串。< / p>
例如:
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*
的指针,可以将其转换为所需类型的数据指针,以便可以解除引用。由于您已将chararray1
和chararray2
定义为char*
,因此可以省略强制转换。