在特定的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