2012-01-26 2 views
1

Код показан ниже:использования преобразования Sprintf спецификаторы

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

Каков инструмент проверки качества, который вы используете? –

+0

@Michale ... QAC - это имя инструмента – Maddy

ответ

-1

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

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

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

+0

Нет ... Это объявляет массив изменяемых строк и инициализирует их. 'text [3] [2] = 'x';' будет работать нормально. Это не проблема. – Nemo

2

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

+1

Это, безусловно, ошибка в коде ... Верхняя граница должна быть 'sizeof (text)/sizeof (текст [0])'. Но это звучит не так, как жалуется инструмент, по крайней мере для меня. – Nemo

+0

Это хороший улов (и инструмент анализа должен был его поймать), но это было бы очень странное диагностическое сообщение для этой проблемы. –

+0

Я согласен, и после второго размышления, скорее всего, это то, что указал Немо. –

3

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

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

+0

@Nemo ... только что изменился с неподписанного символа на char и инструмент QA, это не предупреждение вообще. – Maddy