我正在尝试分配足够的空间来以相反的顺序保存给定数组arg_list
的所有命令行参数。
char* arg_list[6];
arg_list = malloc((sizeof(char*)) * argc);
for (i=argc; i < 0; i--)
{
arg_list[i]=argv[i];
}
我的理论是在malloc
上获取sizeof
一个char*
,然后将其乘以给出的论数,argc
给出所需的总空间量
然后使用for循环,以元素数量i
开始argc
,例如5,然后将argv
的第5个元素放入arg_list
中的第5个点{1}}并执行此操作直到达到0.
我收到incompatible implicit declaration
的警告和assignment to expression with array type
的错误,不知道我哪里出错了。此外,我现在已经使用C大约一天半了,如果可以的话,尽可能地减少所有东西!我真的很感激!
编辑:麻烦打印出反转阵列 代码:
char** arg_list = malloc((sizeof(char*)) * argc);
/** arg_list points to the command-line arguments in the */
/** reversed order */
for (i=argc-1; i >= 0; i -=1)
{
arg_list[i]=argv[i];
}
/** print the content of arg_list */
/** fill here */
for (i=0; i<argc; i++)
{
printf(arg_list[i]);
printf("\n");
}
我对如何打印逆序而感到困惑。每当我打印它时,它按正常顺序打印而不是反转。我对如何以正常顺序而不是反向放入arg_list
感到困惑。谢谢!
答案 0 :(得分:2)
宣布后
char* arg_list[6];
您无法为arg_list
分配任何内容。您只能分配给它的元素。因此,
arg_list = malloc(...);
错了。您可以使用:
arg_list[0] = malloc(...);
但那不是你追求的目标。
您需要使用:
char** arg_list = malloc((sizeof(char*)) * argc);
答案 1 :(得分:1)
您想要char **arg_list;
此外,对于argc
项,最大下标为[argc - 1],
,因此您需要调整该循环。
答案 2 :(得分:1)
我正在回答已编辑的版本,其中已包含其他答案和评论的更正。
向后倾斜并看看
for ...
arg_list[i] = argv[i];
因此,您将位置[i]
的指针指定到位置[i]
的指针:
arg_list[argc-1] = argv[argc-1];
...
arg_list[1] = argv[1];
arg_list[0] = argv[0];
现在想想逆转意味着......
试着跟着我。如果你完成了(无论成功与否)都会发表评论,我会提供完整的解决方案。但请先尝试自己,这非常简单,它将比完全呈现的解决方案更有帮助。
解决方案:您必须从不同方向索引两个数组:
for (int i = 0 ; i < argc ; i++ )
arg_list[i] = argv[ argc - 1 - i];
我改为循环到更明显的递增循环,方向无关紧要。
请注意,最上面的条目的索引是argc - 1
,而不是argc
,就像在C中一样 - 在大多数编程语言中 - 索引从0开始。
警告:打印可变数据时,始终应使用printf
&amp;的格式字符串。家庭。当prionting外部提供的数据(如命令行参数)时,这将成为必需的。没有做广泛的打开安全漏洞。试着考虑提供%s
作为参数。这实际上导致:
printf("%s");
请注意,您没有提供必需的字符串参数,但printf
尝试读取它。