簡體   English   中英

只有一個值作為輸入時的分段錯誤

[英]Segmentation fault when there is just one value as input

我的代碼似乎工作正常,但是當只有一個值作為輸入時,我得到了分段錯誤。 它應該基於數字打印一個正方形作為字符輸入。

測試用例:["2", "2"] "oo\noo\n" 測試用例:["", ""] "" 測試用例:["2"] SIGSEGV (signal 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("o\n");
                }else if(*y<=2 && i == 0){
                    printf("o");
                }else if(*y<=2 && i == 1){
                    printf("o\n");
                }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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM