#include <stdio.h>
char pos[] = {34,92,48,51,51,91,57,59,57,72,37,115,34}; // "\033[9;9H%s"
main() {
printf(pos,"Aaaaaaa"); // (1) This doesnt work as intended
printf("\033[9;9H%s","Aaaaaaa"); // (2) Works as intended
}
那么为什么(2)有效,(1)没有?
答案 0 :(得分:0)
pos
存在两个问题。
首先,你拥有的是一个字符数组,而不是一个以空字符结尾的字符串。您需要在该数组的末尾添加0。
其次,你没有相同的字符。在字符串文字"\033[9;9H%s"
中,总共有8个字符,而pos
有13个字符。
序列\033
表示单个字符,其值为33八进制或27十进制。您改为使用文字字符'\'
,'0'
,'3'
和'3'
。所以用27替换92,48,51,51。另外,pos
中的第一个和最后一个字符有34个,这是双引号字符"
。这些字符不是字符串文字的一部分,但用于在代码中表示它。所以摆脱那些。
pos
现在看起来应该是这样的:
char pos[] = {27,91,57,59,57,72,37,115,0};
答案 1 :(得分:0)
你有三个不同之处:
您不需要初始和最终34
字符("
),因为字符串(2)不会将其打印出来。
您需要一个空终结符,以确保您只打印字符串,而不再需要。
如果\033
是转义字符,则其值仅为27
,而不是92,48,51,51
。
解决了这些差异后,您的pos
数组:
{34,92,48,51,51,91,57,59,57,72,37,115,34}
应该看起来像这样(对齐以匹配原始数组):
{27,91,57,59,57,72,37,115,0}