显示错误zsh:分段错误。如何改变?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了显示错误zsh:分段错误。如何改变?相关的知识,希望对你有一定的参考价值。

我尝试创建一个显示其给定参数的程序。当我启动一个编译的程序时,我写test1 test2 test3 test4

它显示:

-

test1
test2
test3
test4
zsh: segmentation fault  ./a.out test1 test2 test3 test4

-

码:

int     main(int argc, char **argv)
{

    int i;
    int j;
    i = 0;
    j = 1;
    if (argc >= 1)
    {
        while (argv[j][i] != '')
        {
            while (argv[j][i] != '')
            {
                ft_putchar(argv[j][i]);
                i++;
            }
            j++;
            i = 0;
            ft_putchar('
');
        }
    }
    return (0);
}

我的代码应该改变什么?

答案

你不会停止你的while循环并最终访问你不应该访问的地方。

argv是一个字符串数组,其大小为“argc”,因此“j”不应等于或大于“argc”。

但实际上,argv是一个大小为“argc + 1”的数组,最后一个值为NULL。所以你可以简单地循环,直到“argv [j]”为NULL。

另一答案

argc3例如argv [3]是NULL所以你的segfault正在访问argv[3][i] 循环而不是for (j=0; j<argc; j++)

如果由于某种原因你不能使用for循环这个代码应该有帮助;

int     main(int argc, char **argv)
{

    int i;
    int j;
    i = 0;
    j = 1;
    if (argc >= 1)
    {
        while (argv[j])
        {
            while (argv[j][i] != '')
            {
                ft_putchar(argv[j][i]);
                i++;
            }
            j++;
            i = 0;
            ft_putchar('
');
        }
    }
    return (0);
}

以上是关于显示错误zsh:分段错误。如何改变?的主要内容,如果未能解决你的问题,请参考以下文章

Zsh 提示仅显示最后一次错误代码

QApplication 执行分段故障错误

为啥在访问二级指针时出现分段错误错误? C语言

为啥我的代码结果显示分段错误(核心转储)?

确定导致分段错误的代码行?

c++ 。我试图通过在开关内使用数组来获取用户输入,但是当我运行代码时它显示分段错误?