如何修改下列程序才避免段错误

test1.c


#include <stdio.h>

int main(void)
{
    int input = 0;
    printf("Input a int number: \n");
    scanf("%d", input);
    printf("input = %d \n", input);

    return 0;

}

上述程序运行会发生段错误,原因在于 scanf("%d", input); 出错. 正常情况,我们都是如是写: scanf("%d", &input); 那么,在不改变源程序的情况下,如何增加必要代码,避免段错误?


下面的程序给出解决方案:


test2.c


#include <stdio.h>

int main(int argc, char **argv)
{
    if (argc < 2)
    {
        printf("Run: ./test 0/1/2 \n");
        exit(1);
    }

    int i = atoi(argv[1]);
    printf("i = %d \n", i);
    if(0 == i)
    {
        int input = 0;
        printf("Input a int number: \n");
        scanf("%d", input);
        printf("input = %d \n", input);
    }
    else if(1 == i)
    {
        int input = 0;
        int inputArds = 0;
        input = &inputArds;
        printf("Input a int number: \n");
        scanf("%d", input);
        printf("input = 0x%x, inputArds = %d\n", input, inputArds);
    }
    else if(2 == i)
    {
        int input = 0;
        int inputArds = 0;
        input = &inputArds;
        printf("Input a int number: \n");
        scanf("%d", &inputArds);
        printf("input = %d \n", inputArds);
    }

    return 0;
}

i 等于 0 即是 test1.c的情况.发生段错误.

i 等于 1即是修改后的情况,不会发生段错误.

i等于2是正常写法.


运行结果:


#./inputTest
Run: ./test 0/1/2
# ./inputTest 1
i = 1
Input a int number:
32
input = 0x7fcb07b8, inputArds = 32
# ./inputTest 0
i = 0
Input a int number:
3232
Segmentation fault
# ./inputTest 2
i = 2
Input a int number:
343
input = 343


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值