Scanf_s读错输入

时间:2016-09-24 11:10:33

标签: c printf output scanf

对于下面的代码(在C中)

    int small_a, small_b;
    printf("Please input two numbers\n");
    scanf_s("%d %d", &small_a, &small_b);
    printf("%d %d", &small_a, &small_b);
    int test_2nd = small_a - small_b;
    if (test_2nd < 0) {
        printf("a is smaller %d", &small_a);
    }
    else {
    printf("b is smaller %d", &small_b);

我写4和2时打印的值是一个巨大的六位数(在这种情况下为5504620和5504608)我不明白它出错的地方。 stdio.h已被列为标题。

1 个答案:

答案 0 :(得分:2)

这里的问题出在print语句中。在代码中

 printf("%d %d", &small_a, &small_b);

您不需要(想要)来获取(打印)地址。删除&

那就是说,这实际上是在调用undefined behavior%d printf()期望int类型的参数,并且您实际上提供了int *,从而导致UB。

FWIW,要打印地址(指针),您需要使用%p格式说明符并将参数强制转换为void *