是什么导致我的代码出现分段错误,我该如何解决?
What's causing segmentation fault in my code and how do I fix it?
程序应该将两个整数相乘并打印相乘结果。
如果程序没有收到 2 个参数,它应该打印 Error 和 return 1.
我用
编译了它
当我用 <./mul int int > 或 <./mul int int int > 运行 它输出正确的结果但是当我 运行 它只用 <./mul >它说 segmentation fault 我希望它输出错误。
我的代码如下。提前致谢
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
int x = atoi(argv[1]);
int y = atoi(argv[2]);
if (argc == 3)
{
printf("%d\n", x * y);
}
else
{
printf("Error\n");
return 1;
}
return 0;
}
你想要这个:
int main(int argc, char* argv[]) // char* argv[] here
{
if (argc != 3) // test argc *before* dereferencing argv[1] and argv[2]
{
printf("Error\n");
return 1;
}
int x = atoi(argv[1]);
int y = atoi(argv[2]);
printf("%d\n", x * y);
return 0;
}
您正在取消引用 argv[1]
和 argv[2]
,然后 测试 argc
是否为 3。指令按顺序执行。如果您在命令行上不带参数执行程序,argc
将为 1 并且 argv[1]
超出范围,因此出现段错误。
而且main
的签名是错误的,应该是int main (int argc, char *argv[])
。 main
的第二个参数是指向 char
.
的指针数组
程序应该将两个整数相乘并打印相乘结果。 如果程序没有收到 2 个参数,它应该打印 Error 和 return 1.
我用
当我用 <./mul int int > 或 <./mul int int int > 运行 它输出正确的结果但是当我 运行 它只用 <./mul >它说 segmentation fault 我希望它输出错误。 我的代码如下。提前致谢
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
int x = atoi(argv[1]);
int y = atoi(argv[2]);
if (argc == 3)
{
printf("%d\n", x * y);
}
else
{
printf("Error\n");
return 1;
}
return 0;
}
你想要这个:
int main(int argc, char* argv[]) // char* argv[] here
{
if (argc != 3) // test argc *before* dereferencing argv[1] and argv[2]
{
printf("Error\n");
return 1;
}
int x = atoi(argv[1]);
int y = atoi(argv[2]);
printf("%d\n", x * y);
return 0;
}
您正在取消引用 argv[1]
和 argv[2]
,然后 测试 argc
是否为 3。指令按顺序执行。如果您在命令行上不带参数执行程序,argc
将为 1 并且 argv[1]
超出范围,因此出现段错误。
而且main
的签名是错误的,应该是int main (int argc, char *argv[])
。 main
的第二个参数是指向 char
.