未使用scanf将十六进制值正确写入字符 [英] Hexadecimal value not being written correctly to a char using scanf

查看:21
本文介绍了未使用scanf将十六进制值正确写入字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用C语言编程,使用scanf将两个值写入两个不同的变量,然后使用printf输出。但是,当我键入两个值中的第一个值时,它只返回($00)。但是,第二个值似乎工作得很好,并且将报告我键入的内容。我假设这只是一个scanf问题。以下是发生问题的代码的一部分。为什么会这样?

intA = strcmp(command, "write");
if(intA != 0) intA = strcmp(command, "w");
if(intA == 0){
    printf("location to write to, value> ");
    scanf(" %x %x", &charA, &charB);
    ram[charA] = charB;
    printf("($%.2x): $%.2x

", charA, ram[charA]);
}

推荐答案

您正在使用%x,它用于读取无符号整数。显然,您正在尝试读取无符号char类型的值。所以您需要一个长度修饰符。 试试这个:

scanf("%hhx%hhx", &charA, &charB);

如果没有hh修饰符,scanf将在charAcharB上写入一个整型值的字节(可能是2个或4个),从而损坏附近的一些内存。

具体地说:您说";当我键入两个值中的第一个值时,它只返回00。然而,第二个值似乎工作得很好&q;。因此,如果您键入12作为您的位置,34作为您的值,scanf试图将003400000034写入charB,多余的00会溢出到charA的顶部。(那是scanf尝试将001200000012写入charA之后的,后者同样溢出并覆盖其他内容。)

或者,您可以将charAcharB变量声明为unsigned int类型。把他们塑造成人物不会有什么好处。(正如我们所见,有些东西会丢失!)

这篇关于未使用scanf将十六进制值正确写入字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆