小编Seá*_*lle的帖子

s(n)printf打印的字符数多于格式说明符指定的字符数

sprintf在嵌入式系统(Libelium Waspmote,类似于Arduino)上遇到了一个奇怪的问题,其中sprintf输出的字符多于格式说明符给出的字符.在这个特定的实例中,我%02X用来输出数组中十六进制的字节值.但是在某些字节上,不是写入2个字符,而是写入4个字符,并FF在实际字节值之前加上前缀.snprintf行为类似,只是它尊重指定的缓冲区大小,只打印前缀.

作为参考,这里是打印数组内容的代码片段:

char *pduChars = (char *) malloc(17*sizeof(char));
pduData.toChar(pduChars);
for (int i = 0; i < 17; i++) {
    char asciiCharsS[5];
    char asciiCharsSN[3];
    int printedS = sprintf(asciiCharsS, "%02X", pduChars[i]);
    int printedSN = snprintf(asciiCharsSN, 3, "%02X", pduChars[i]);
    USB.print(printedS);
    USB.print(" ");
    USB.print(printedSN);
    USB.print(" ");
    USB.print(asciiCharsS);
    USB.print(" ");
    USB.print(asciiCharsSN);
    USB.println(" ");
}
Run Code Online (Sandbox Code Playgroud)

并且该片段的输出(仅缩写为错误字节):实际字节序列应为0x00 0xFC 0xFF 0xFF 0x48 0xA5 0x33 0x51

sprintf snprintf sprintf Buffer snprintf Buffer


2 2 00 00
4 4 FFFC …

c embedded stdio

1
推荐指数
1
解决办法
1018
查看次数

标签 统计

c ×1

embedded ×1

stdio ×1