C:马洛克字符串数组混淆



我正在尝试分配足够的空间来保存以相反顺序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],,因此您需要调整该循环。

相关内容

  • 没有找到相关文章

最新更新