見事にはまった。"\x02A" こんな書き方はしてはいけない。
main.c
#include <stdio.h>
#include <string.h>
int main(void) {
char s1[] = {0x02, 'A', '\0'};
char s2[] = "\x02A";
printf("strcmp(s1, s2) = %d", strcmp(s1, s2));
return 0;
}
勘のいい人は STX, 'A', ... , ETX なんてシリアル通信データがあるのだろうと思うのだろうけど。その通りです。コンパイル時に警告はあるそうですが、私の環境は出ませんでした。
ちなみに裏技は "\x02" "A" と書いて回避します。