2012-01-26 70 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

對於text的內容,您將從const char[]轉換爲unsigned char[]

如果您試圖做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(text [0])'。但這聽起來不像是該工具所抱怨的,至少對我來說。 – Nemo

+0

這是一個很好的結果(分析工具應該能夠抓住它),但那對於這個問題將是一個非常奇怪的診斷信息。 –

+0

我同意並且在第二次想到之後更可能是Nemo指出的。 –

3

我的猜測是你的QA工具堅持char *(而不是unsigned char *)的參數爲%s

嘗試聲明您的數組爲char或鑄造text[i]char *

+0

@Nemo ...剛從unsigned char變成了char,QA工具根本就沒有發出警告。 – Maddy