gpt4 book ai didi

纠正此段错误

转载 作者:行者123 更新时间:2023-11-30 18:54:59 26 4
gpt4 key购买 nike

我正在用 C 语言完成这个示例,而我的 Debian(64 位 Kali)发行版一直说这会导致段错误并且无法运行它。我想解决这个问题,以便我可以运行它并继续学习汇编。这是我的命令:

gcc -ggdb -mpreferred-stack-boundary=2 -fno-stack-protector -o Simple SimpleDemo.c

来源:

#include<stdio.h>
#include<stdlib.h>

int add(int x, int y)
{
int z =10;

z = x + y;
return z;
}

main(int argc, char **argv)
{
int a = atoi(argv[1]);
int b = atoi(argv[2]);
int c;
char buffer[100];

gets(buffer);
puts(buffer);

c = add(a,b);

printf("Sum of %d+%d = %d\n",a, b, c);
exit(0);
}

最佳答案

你提供了两个论点吗?程序需要它们,但不检查它们是否存在。如果您不带参数运行程序,则可能会导致段错误。

如果这是一个严重的例子,我会扔掉这本书并去别处寻找。 main() 函数没有返回类型。它不检查程序参数。它有一个多余的缓冲区读写。它使用exit(),而通常使用return。函数 add() 在覆盖 z 之前为其赋值。这是清理后的代码,但使用 strtol() 仍然比使用 atoi() 更好。

#include<stdio.h>
#include<stdlib.h>

int add(int x, int y)
{
int z = x + y;
return z;
}

int main(int argc, char **argv)
{
int a, b, c;
if (argc < 3)
{
printf ("Need two arguments\n");
return 1;
}
a = atoi(argv[1]);
b = atoi(argv[2]);
c = add(a,b);
printf("Sum of %d+%d = %d\n",a, b, c);
return 0;
}

关于纠正此段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29112250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com