为什么在使用“%s”时sprintf不起作用?

5
我正在使用IMXRT1021 NXP微控制器和sprintf函数,但没有得到所需的输出。

库:Redlib (nohost-nf)

我已经尝试过两种方法,但结果都相同。

sprintf(at,"AT=\x22%s\x22,\x22%s\x22\r\n","abcdef","123456");

sprintf(at,"AT=\"%s\",\"%s\"\r\n","abcdef","123456");

预期输出:

AT="abcdef","123456"\r\n

实际输出:

AT=\"abcdef\",\"123456\"\r\n

1
看到反斜杠是相当不寻常的,任何C编译器都会将它们删除。确保这不是调试器在做这件事。 - Hans Passant
2
你使用的是哪个编译器?代码看起来没问题。 - th33lf
2
你的调试器显示了反斜杠。 - Jabberwocky
2
你在哪里看到这个输出?我会诱惑性地通过查看调试器中从 at 开始的实际内存内容来获得绝对的清晰度。 - slim
1
你能澄清一下你在哪里看到这个输出吗?是在终端/UART还是其他地方? - Lundin
1个回答

5
这取决于你所讨论的内容。
如果你将其输出到终端,你会看到你预期的字符串。
AT="abcdef","123456"   # plus newline etc.

然而,该字符串的C 表示 如下:
"AT=\"abcdef\",\"123456\"\r\n"

1
早些时候我在调试器中检查出了错误的结果,还有其他问题导致出错,所以我认为字符串有问题,但后来通过检查数组的每个元素进行确认。 - jtro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接