显示错误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。
另一答案
当argc
是3
例如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:分段错误。如何改变?的主要内容,如果未能解决你的问题,请参考以下文章