测试代码:
#include <stdio.h>
int main(int argc, char **argv) {
char buf[10];
char c[] = "%i";
unsigned char uc[] = "%i";
const char cc[] = "%i";
const unsigned char cuc[] = "%i";
const unsigned char *cucp = "%i";
sprintf(buf, (char *)c, 1);
sprintf(buf, (char *)uc, 1);
sprintf(buf, (char *)cc, 1);
sprintf(buf, (char *)cuc, 1);
sprintf(buf, (char *)cucp, 1);
return 0;
}
编译:
gcc -Wformat -o test test.c
test.c: In function ‘main’:
test.c:16:26: warning: format is a wide character string [-Wformat=]
sprintf(buf, (char *)cuc, 1);
^
为什么我会收到 const unsigned char 的警告,而不是其他类型的警告?
使用gcc 5.4.0和一些交叉gcc 4.3.2进行测试。 解释可能包括存储不同数据类型的段,但我很惊讶。