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。任何想法是什么原因造成的?
<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; }