在特定 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 ) 版本,因为它不是函数的有效使用 - 在这种情况下,为什么编译器没有警告?或者也许是索尼使用的稍微修改过的编译器是原因。似乎不太可能。