sprintf转换说明符的用法

时间:2012-01-26 05:40:22

标签: c string

代码如下所示:

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中使用的转化说明符的任何建议吗?

3 个答案:

答案 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[][]