使用十六进制字符作为c程序的输入会更改字符吗



我有一个名为"hex"的短c程序,它接受两个字符并输出相应的十六进制代码:

int main(void) {
unsigned char var[3];
printf("Enter two hex characters: ");
scanf("%2s", var);
printf("%x ", var[0]);
printf("%x ", var[1]);
}

现在,当我调用这个程序时,输入由十六进制代码中的两个字符"A"one_answers"0"组成:

echo -e "x41x00" | ./hex

然后输出为(如预期的("41 0"。但是当我用十六进制代码"0d"调用这个程序两次时:

echo -e "x0dx0d" ./hex

那么输出是"0 bb"?为什么会这样?我可以做些什么来使用十六进制代码"0d"s的正确输入,而不是我正在使用的输入?

编辑:scanf应该在print语句之前,这是复制粘贴错误。我纠正了它。

打印必须在读取之后。

此外,%s将跳过换行符,x0d是CR,这是换行符之一,因此您应该使用fread()来避免跳过输入。

#include <stdio.h>
int main(void) {
unsigned char var[3];
fread(var, 1, 2, stdin);
printf("%x ", var[0]);
printf("%x ", var[1]);
printf("Enter two hex characters: ");
}

您的代码是一个很大的未定义的行为。您可以打印未初始化数组的元素。打印后,scanf这些元素。

你不觉得这个订单有点奇怪吗?

相关内容

  • 没有找到相关文章

最新更新