использование спецификаторов преобразования sprintf - PullRequest
1 голос
/ 26 января 2012

Код показан ниже:

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 ]

3 голосов
/ 26 января 2012

Я предполагаю, что ваш инструмент обеспечения качества настаивает на char * (не unsigned char *) для аргумента %s.

Попробуйте объявить ваш массив как char или привести text[i] к char *.

2 голосов
/ 26 января 2012

Может ли это быть сцепление, потому что верхние границы текстового массива в цикле будут 4 (индекс от 0 до 4), но при инициализации массива верхняя граница составляет только 3 (индекс от 0 до 3)?

0 голосов
/ 26 января 2012

Вы переводите из const char[] в unsigned char[] для содержимого text.

Что бы произошло, если бы вы попытались сделать text[3][2] = 'x';?

Строковые литералы могут находиться в памяти только для чтения. Массив должен быть const char[][], а не unsigned char[][].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...