只有一个值作为输入时出现分段故障

  • 本文关键字:分段 故障 有一个 c
  • 更新时间 :
  • 英文 :


我的代码似乎工作得很好,但当只有一个值作为输入时,我会遇到Segmentation错误。它应该打印一个基于数字的正方形作为字符输入。

测试用例:["2","2"]"oo\noo"测试用例:[","]"quot;测试用例:["2"]SIGSEGV(信号11(

#include <string.h>
#include <stdlib.h>
void my_square(int *x, int *y)
{
int i , j;
if (*x == 0 || *y == 0) {
printf("");
}
else{
for(i = 0; i < *x; i++){
for(j = 0; j < *y; j++){
if(*x<=2 && j == 0){
printf("o");
}else if(*x<=2 && j == 1){
printf("on");
}else if(*y<=2 && i == 0){
printf("o");
}else if(*y<=2 && i == 1){
printf("on");
}else{
//printf(" i: %d, j: %d ", i, j);
if(i == 0 && j == 0 || i == *y-1 && j == 0 || i == 0 && j == *x-1 || i == *y-1 && j == *x-1){
printf("o");
} 

if(i >= 1 && j == 0 && i != *y-1) {
printf("|");
}
if(i >= 1 && j == *x-1 && i != *y-1) {
printf("|");
}
if(i == 0 && j >= 1 && j != *y-1|| i == *x-1 && j >= 1 && j != *y-1){
printf("-");
}
if(i >= 1 && j >= 1 && i < *x-1 && j < *y-1){
printf(" ");
}
if(j == *x-1){
printf("n");
}

}
//printf("> %d, %d", i, j);
}
}
}
}
int main(int ac, char **av)
{
int x = atoi(av[1]);
int y = atoi(av[2]);
my_square(&x, &y);
return 0;
}```

在访问av之前,应始终检查ac,否则可能导致未定义的行为(并导致分段错误(。

这就是你可以做到的(第一个值总是程序文件名(:

int main(int ac, char **av)
{
int x, y;
if (ac <= 3)
{
x = atoi(av[1]);
y = x; // if there's only one argument, we use it for both x and y
if (ac == 3)
{
y = atoi(av[2]);
}

my_square(&x, &y);
}
return 0;
}

最新更新