代码如下所示:
static unsigned char text [] [10] = {
"/name",
"/place",
"/address",
"/office"
};
unsigned char l_my_file[80];
main()
{
int i;
for(i = 0;i<5;i++)
{
(void)sprintf((char *)l_my_file, "%s",text[i]);
}
}
现在这个sprintf工作正常,所有正确打印的字符串。
现在问题出现在我运行质量分析检查工具时会弹出一条消息,告诉Argument type does not match conversion specifier number 1
。
有关sprintf
中使用的转化说明符的任何建议吗?
答案 0 :(得分:3)
我的猜测是,您的质量检查工具坚持char *
(而不是unsigned char *
)参与%s
。
尝试将您的数组声明为char
或将text[i]
投射到char *
。
答案 1 :(得分:2)
它是否可以抓握,因为循环中文本数组的上限将是4(索引0到4),但是你初始化数组的方式它的上限只有3(索引0到3)? / p>
答案 2 :(得分:-1)
您正在将const char[]
转换为unsigned char[]
以获取text
的内容。
如果您尝试text[3][2] = 'x';
会怎么样?
允许字符串文字在只读内存中。该数组应为const char[][]
,而不是unsigned char[][]
。