【发布时间】:2018-01-31 21:17:28
【问题描述】:
当尝试在字符串中使用 '\x05' 时,编译后的 C 代码在处理该值时似乎表现异常。
例如使用以下字符串时:
char *weird = "\x04\x68\x65\x79\x79\x03\x6e\x65\x74\x05\x6c\x6f\x63\x61\x6c\x00";
打印字符串的每个字符时,'\x05'不对应整数5,而'\x04'和'\x03'分别对应整数4和3。
下面的for循环演示了这个问题:
for(int i = 0; i < strlen(question); i++){
printf("question[%d] = %c\n", i, question[i]);
}
输出:
知道为什么'\x05' 的这个具体案例如此麻烦吗?
【问题讨论】:
-
它表现得很好。 3 和 4 不对应任何整数。你的字体就是这样显示的。
-
您要打印字符“5”吗?如果是这样, '\x05' 不是你要找的。 '5' 的 ASCII 码是 '\x35'。
-
0x03是ETX(文本结束),0x04是EOT(传输结束),0x05是ENQ(查询)。这些不是可打印的字符,而是control characters。 -
“是”和“不是”可打印取决于 OP 的终端旨在处理什么。显然,在 OP 的角色中,他们是——他们是否应该是另外一回事。我认为显示某些内容是为了方便,而不是“什么都没有”——或者整个系统崩溃。
-
提示:要使打印的内容更加清晰,请用标记字符包围 -->
printf("question[%d] = [%c]\n", i, question[i]);添加[]。也许'\0x05'正在打印一个空格?更好的是,试试for(int i = 0; i <= 48; i++) { printf("%2d = [%c]\n", i, i); }
标签: c printf control-characters