我正在尝试使用sprintf一次发送两个命令。命令应该用0x0A(LF)分隔。我以为我可以使用两个斜杠输入特殊字符,所以我写的是:
sprintf(tmpstr,"VSET1:%ld.%3.3d\\x0AVSET2:%ld.%3.3d",mv/1000, AbsVal((int)mv%1000), mv / 1000, AbsVal((int)mv % 1000));
似乎只识别第二个命令(VSET2)。
我做错了什么?
答案 0 :(得分:2)
在格式字符串中使用\n
。另外,使用单个反斜杠而不是\\
。
如果要将缓冲区写入文件,请以二进制模式打开文件。
无论您使用\n
还是\x0A
,都必须以二进制模式打开文件,以避免不可移植的翻译。
请参阅Escape sequences。
答案 1 :(得分:0)
在字符串文字中使用\\x0A
时,第一个反斜杠会转义第二个反斜杠。因此,该字符串包含反斜杠字符'\\'
,后跟字符'x'
,'0'
和'A'
。
要使用0x0A
代表的字符,您需要使用\x0A
。
答案 2 :(得分:0)
您应该使用单个反斜杠而不是两个反斜杠。尝试下面给出的陈述:
sprintf(tmpstr,"VSET1:%ld.%3.3d\x0AVSET2:%ld.%3.3d",mv/1000, AbsVal((int)mv%1000), mv / 1000, AbsVal((int)mv % 1000));
但是,您在程序中执行的操作将打印字符串"\x0A"
,而不是ASCII字符(0xAA
(换行符))。
在C中,所有转义序列都包含两个或多个字符,第一个是反斜杠,\(称为“转义字符”);剩下的字符决定了转义序列的解释。
默认情况下,C将反斜杠作为转义序列处理。但是,在你的程序中,你告诉C编译器不要通过在字符串中添加额外的反斜杠来使用反斜杠作为转义序列。
答案 3 :(得分:0)
这很完美。您不仅可以插入\ n,而且在代码中看起来也是正确的。行尾也不需要\。我将其用于较大的段落。个人数据已被混淆。
enter code here
wchar_t msg [200]; swprintf(msg,L“ XYZ%d:ABCD限制设置为%d %%。%d乘以abcd和xyz rstu%d %% \ n” “您要修复它吗?\ n” “是可以解决的\ n” “否将忽略它并继续\ n” “取消将中止运行\ n”,xxx,yyy,zzz,aaa);