我正在尝试将数组与argv中的数组连接起来(我忘了它的正式名称,输入数组?参数数组?)
无论如何,我初始化原始数组,然后我memcpy用来将两个数组复制到新数组中.
int main(int argc, char *argv[]) {
char *args1[] = {"foo","bar"};
char **args = (char**) calloc(argc, sizeof(char*));
memcpy(args, args1, sizeof(char*) * 2);
memcpy(args + sizeof(char*) * 2, argv+1, sizeof(char*) * (argc-1));
Run Code Online (Sandbox Code Playgroud)
但是当我跑这个
printf("%s %s %s\n", args[0], args[1], args[2]);
Run Code Online (Sandbox Code Playgroud)
然后跑
./test baz
我得到了结果
foo bar(null)
所以我想弄清楚我的第二个memcpy搞砸了,但我找不到它.有帮助吗?提前致谢.
这段代码有两个问题.
问题#1
calloc(argc, sizeof(char*))
Run Code Online (Sandbox Code Playgroud)
应该
calloc(argc + 2, sizeof(char*))
Run Code Online (Sandbox Code Playgroud)
问题#2
你是混淆指针算术.这部分
args + sizeof(char*) * 2
Run Code Online (Sandbox Code Playgroud)
应该只是
args + 2
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用
&args[2]
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,都不要将偏移量乘以类型的大小.编译器会自动执行此操作.