未使用scanf将十六进制值正确写入字符 [英] Hexadecimal value not being written correctly to a char using scanf
本文介绍了未使用scanf将十六进制值正确写入字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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
将在charA
和charB
上写入一个整型值的字节(可能是2个或4个),从而损坏附近的一些内存。
12
作为您的位置,34
作为您的值,scanf
试图将0034
或00000034
写入charB
,多余的00
会溢出到charA
的顶部。(那是scanf
尝试将0012
或00000012
写入charA
之后的,后者同样溢出并覆盖其他内容。)
或者,您可以将charA
和charB
变量声明为unsigned int
类型。把他们塑造成人物不会有什么好处。(正如我们所见,有些东西会丢失!)
这篇关于未使用scanf将十六进制值正确写入字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文