RX631CPUを使ってソフト開発しています.環境はCS+で、コンパイラはCC-RXで、V-2.08およびおV-3.04に切り替えて確認しています.
sprintfの書式で、納得できないコードが生成されています.下記のコメント欄は生成された文字列です.(メモリ情報を確認)
int iTest = 0x01AB; // = 427, &xSys.Buf = 0x00002680
sprintf((char *)&xSys.Buf[0x10], "<%X>", iTest); // 0x2690 "<1AB>\0" sprintf((char *)&xSys.Buf[0x18], "<%4X>", iTest); // 0x2698 "<%4X>\0" sprintf((char *)&xSys.Buf[0x20], "<%04X>", iTest); // 0x26a0 "<%4X>\0" sprintf((char *)&xSys.Buf[0x28], "<%*X>", 4, iTest); // 0x26a8 "< 1AB>\0" sprintf((char *)&xSys.Buf[0x30], "<%0*X>", 4, iTest); // 0x26b0 "<01AB>\0" sprintf((char *)&xSys.Buf[0x38], "(%d)", iTest); // 0x26b8 "(427)\0" sprintf((char *)&xSys.Buf[0x40], "(%4d)", iTest); // 0x26c0 "(%4d)\0" sprintf((char *)&xSys.Buf[0x48], "(%04d)", iTest); // 0x26c8 "(%4d)\0" sprintf((char *)&xSys.Buf[0x50], "(%*d)", 4, iTest); // 0x26d0 "( 427)\0" sprintf((char *)&xSys.Buf[0x58], "(%0*d)", 4, iTest); // 0x26d8 "(0427)\0" sprintf((char *)&xSys.Buf[0x60], "(%+4d)", iTest); // 0x26e0 "(%4d)\0" sprintf((char *)&xSys.Buf[0x68], "(%+04d)", iTest); // 0x26e8 "(%4d)\0" sprintf((char *)&xSys.Buf[0x70], "(%+*d)", 4, iTest); // 0x26f0 "(+427)\0" sprintf((char *)&xSys.Buf[0x78], "(%+0*d)", 4, iTest); // 0x26f8 "(+427)\0"
CS+ V7.00.00 [13 Jun 2018] [メモリ情報]2022年7月14日 10:32:17デバッグ・ツール : RX E1(Serial)プロジェクト名 : AX162V30 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f ASCII00002690 | 3C 31 41 42 3E 00 00 00 3C 25 34 58 3E 00 00 00 | <1AB>...<%4X>...000026a0 | 3C 25 34 58 3E 00 00 00 3C 20 31 41 42 3E 00 00 | <%4X>...< 1AB>..000026b0 | 3C 30 31 41 42 3E 00 00 28 34 32 37 29 00 00 00 | <01AB>..(427)...000026c0 | 28 25 34 *** 29 00 00 00 28 25 34 *** 29 00 00 00 | (%4d)...(%4d)...000026d0 | 28 20 34 32 37 29 00 00 28 30 34 32 37 29 00 00 | ( 427)..(0427)..000026e0 | 28 25 34 *** 29 00 00 00 28 25 34 *** 29 00 00 00 | (%4d)...(%4d)...000026f0 | 28 2B 34 32 37 29 00 00 28 2B 34 32 37 29 00 00 | (+427)..(+427)..00002700 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
上記の様に、書式にフィールド幅指定を入れると、正常に文字列が生成されないのですが、どうしてなのでしょうか?
’*’により、フィールド幅指定を変数で与えると正常に出力します.