特定の PlayStation プラットフォームに付属している C/C++ コンパイラでは、非標準の ASCII 文字 (スペイン語などの翻訳言語で使用される - 深刻な、深刻な、そのようなもの) に悩まされています。
char target_string[MAX_STRING_LENGTH];
char string_table[][MAX_STRING_LENGTH];
私が使用する場合
sprintf( target_string, string_table[N] );
ソース文字列に ascii 値が 127 を超える文字 (つまり、signed char では 0 未満) が含まれている場合、コピーされた文字列には非標準の ascii 文字が含まれますが、文字列からの文字はそれ以上含まれません。最初のアクセント付きヨーロッパ文字は、比較が if( char <= 0 ) であるかのように、sprintf ステートメントが終了する場所です。
私が使用する場合
sprintf( target_string, "%s", string_table[N] );
同じ文字列を使用すると、比較が if( char == 0 ) であるかのように、全体が正しくコピーされ、終了します。
これは sprintf の既知の機能ですか? -つまり、関数の有効な使用法ではないため、フォーマット指定子なしで sprintf( target, source ) バージョンを使用しないでください - その場合、コンパイラからの警告がないのはなぜですか? あるいは、ソニーが使用しているわずかに変更されたコンパイラが原因かもしれません。ありそうもない。