为什么定义'x'int(C)

时间:2013-10-27 18:31:43

标签: c

我有问题。当我宣布' x'整数,程序正常工作,但当我删除' x'它给我看了一个奇怪的结果。

 #include <stdio.h>
    #include <conio.h>
    main ()
    {
        int a,b,x;
        char ras;
        printf("Insert a: ");
        scanf("%d", &a);
        printf("Insert b: ");
        scanf("%d", &b);
        printf("Sum or multuply: (s/m)");
        scanf("%s", &ras);
        if (ras=='s')
        {
            printf("Sum is :%d", a+b);
        }
        else if (ras=='m')
        {
            printf("Multiply is :%d", a*b);
        }
        getch();
    }

3 个答案:

答案 0 :(得分:2)

您的程序以任何方式调用未定义的行为,因为scanf存储两个字符(输入的字母加上尾随的0字节),但是您指定的指针指向一个只能包含单个字符的变量。 / p>

在您的特定实现中,如果该变量存在,0字节将简单地覆盖x变量。如果没有,你会覆盖别的东西,导致你的奇怪结果。

要阅读单个字符,您应该使用%c,而不是%s

答案 1 :(得分:1)

不要将“%s”放在scanf模式中,它是一个字符串 - 至少两个字符(你想要的加上NULL)。请改用%c。

http://www.cplusplus.com/reference/cstdio/scanf/

答案 2 :(得分:0)

那是因为你的代码调用了未定义的行为,显然,它正在做这个“有趣”的事情。

UB的原因是%s转换说明符使scanf()在刚刚扫描的字符之外追加一个终止NUL字符,但它没有空间,因此它写入未分配的内存。


请改用%c更好的是,完全摆脱scanf()这是邪恶的。请使用健全的功能,例如getchar()