我正在尝试分配足够的空间来保存以相反顺序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 个位置,并这样做直到它达到 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
感到困惑。谢谢!
一旦你声明了
char* arg_list[6];
您不能将任何内容分配给arg_list
。您只能分配给其元素。因此
arg_list = malloc(...);
是错误的。您可以使用:
arg_list[0] = malloc(...);
但这不是你所追求的。
您需要使用:
char** arg_list = malloc((sizeof(char*)) * argc);
我正在回答编辑的版本,该版本已经包括了其他答案和评论的更正。
向后靠,看看
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];
我把循环改为更明显的递增循环,a方向无关紧要。
注意最上层条目的索引是argc - 1
,而不是argc
,因为在C中 - 就像在大多数编程语言中一样 - 索引从0开始运行。
警告:打印变量数据时,应始终使用 printf
&family 的格式字符串。当朊病毒外部提供的数据(如命令行参数(时,这成为强制性的。未能广泛地做会打开一个安全漏洞。只要考虑提供%s
作为论据。这有效地导致:
printf("%s");
请注意,您不提供所需的字符串参数,但printf
尝试读取它。
你想要char **arg_list;
此外,对于argc
项,最大下标为 [argc - 1],
,因此您需要调整该循环。