尝试输入十六进制值时,程序在scanf("%x",& foo)上崩溃

时间:2018-02-06 01:18:21

标签: c++ hex scanf

我需要输入十六进制值,但是当我尝试执行此代码时,程序崩溃了。我不知道问题是什么。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

static void print_hex(uint8_t*,int);

int main () {
    uint8_t *iv;
    iv = new uint8_t [32];

    printf("Insert hex string:");
    scanf("%x",&iv);

    print_hex(iv,16);

    return 0;
}

static void print_hex(uint8_t * str, int len) {
    for(unsigned int i=0;i<len;i++) {
        printf("%.2x", str[i]);
    }
    printf("\n");
}

1 个答案:

答案 0 :(得分:2)

您正在向指针传递指针,因此会发生未定义的行为。要做得对,你只需要

int32_t iv;
if (scanf("%x", &iv) == 1) {
    fprintf(stdout, "%x\n", iv);
}

然后,您将指针视为字符串并且它当然不是,因此代码将再次调用未定义的行为。

你显然需要学习指针。因为如果你打算学习,你可能需要远离指针。

中有一些引用,它们比指针更易于理解和使用,而且你还有流操作符,其中一些标准将允许你输入十六进制值而不需要{{ 1}}运算符或与poitners相关的任何内容。