2

在特定 PlayStation 平台附带的 C/C++ 编译器上,我对非标准 ASCII 字符(用于翻译语言,如西班牙语 - 严重的、尖锐的,诸如此类)有点麻烦

char target_string[MAX_STRING_LENGTH];
char string_table[][MAX_STRING_LENGTH];

如果我使用

sprintf( target_string, string_table[N] ); 

其中源字符串包含一个 ascii 值高于 127 的字符(即在有符号字符中低于 0),复制的字符串包括非标准 ascii 字符,但字符串中没有更多字符。第一个重音欧洲字符是 sprintf 语句放弃的地方,就好像比较是 if(char <= 0),finish。

如果我使用

sprintf( target_string, "%s", string_table[N] ); 

使用相同的字符串,整个事情都会正确复制,好像比较是 if( char == 0 ) 然后完成。

这是 sprintf 的已知功能吗?- 即我不应该使用没有格式说明符的 sprintf( target, source ) 版本,因为它不是函数的有效使用 - 在这种情况下,为什么编译器没有警告?或者也许是索尼使用的稍微修改过的编译器是原因。似乎不太可能。

4

1 回答 1

2

如果你打电话

sprintf( target_string, string_table[N] );

那么 string_table[N] 将被解释为一个“格式字符串”(如果其中有一个 '%' 你的应用程序将会死掉。不要这样做)

奇怪的字符问题是关于 utf-8,你应该使用 swprintf 和其他 wprintf-s

于 2013-04-24T09:15:30.743 回答