Scanf读取第一个十六进制输入为6b,无论输入了什么[关闭]

问题描述 投票:-1回答:1
对于我的编程工作,我需要创建一个简单的按位计算器。我目前正在为它编写输入,并在这里输入代码:

char input[100], instruction[3]; unsigned int num1, num2; printf("Enter an expression: "); scanf("%x %s %x", &num1, instruction, &num2); printf("Num 1 hex: %x Dec: %d\n",num1, num1 ); printf("Instruction: %s\n", instruction); printf("Num 2 hex: %x Dec: %d\n",num2, num2 ); }

但是无论我写什么,程序总是说Num1是6b。任何想法是什么原因造成的?
c scanf
1个回答
0
投票
您的第一个scanf指令需要以下形式的表达式:

<number> <string> <number>

<string>用于分配您的instruction数组,该数组只有3个字符宽。这样一来,您只能输入2个字符,并留有足够的空间来填充空字符。

[我的心理力量建议您为instruction输入两个以上的字符。例如。您的第一个输入是:

101 bob 102

当然,b o b \0使instruction数组溢出1。

技术上未定义的行为,但您输入的输入字符很有可能溢出到num1的存储空间中。

instruction增加到更长的时间。似乎您已经在使用一个大小为100的数组,名为input。因此,只需使用它。

int main() { char input[100], instruction[3]; unsigned int num1, num2; printf("Enter an expression: "); scanf("%x %s %x", &num1, input, &num2); printf("Num 1 hex: %x Dec: %d\n", num1, num1); printf("Instruction: %s\n", input); printf("Num 2 hex: %x Dec: %d\n", num2, num2); return 0; }

© www.soinside.com 2019 - 2024. All rights reserved.