在特定的PlayStation平臺附帶的C/C++編譯器中,我有一個非標準ASCII字符的麻煩點(用於翻譯語言,如西班牙語 - 嚴重,尖銳,那種東西)sprintf(target,source)與sprintf(target,「%s」,source)有不同的行爲;
char target_string[MAX_STRING_LENGTH];
char string_table[][MAX_STRING_LENGTH];
如果我使用
sprintf(target_string, string_table[N]);
其中源字符串包含一個字符與(在一個符號的字符即低於0)127以上的ASCII值被複制字符串包括非標準ASCII字符,但沒有更多的字符來自字符串。第一個重音歐洲字符是sprintf語句放棄的位置,就好像比較是if(char < = 0),完成。
如果我使用
sprintf(target_string, "%s", string_table[N]);
具有相同的字符串,整個事情正確複製,因爲如果比較是,如果(字符== 0),然後完成。
這是sprintf的一個已知功能嗎? - 即我不應該使用沒有格式說明符的sprintf(target,source)版本,因爲它不是函數的有效使用 - 在這種情況下爲什麼沒有來自編譯器的警告?或者,索尼正在使用的稍微修改過的編譯器是原因。似乎不太可能。
編譯器不會發出警告,因爲它不知道'string_table [N]的方式'是不是有效格式字符串。 – Medinoc 2013-04-24 09:24:44
你是完全正確的 - 我沒有意識到格式字符串不需要是字符串文字,而且也不需要是最終參數,因爲當然格式字符串可以是一個有效的字符串,就像printf一樣。謝謝! – 2013-04-24 09:35:09