Sur le compilateur C/C++ fourni avec une plateforme PlayStation particulière, j'ai un problème avec des caractères ASCII non standard (utilisés dans des langues traduites telles que l'espagnol - grave, aigu, ce genre de choses)
char target_string[MAX_STRING_LENGTH];
char string_table[][MAX_STRING_LENGTH];
si j'utilise
sprintf( target_string, string_table[N] );
où la chaîne source contient un caractère avec une valeur ascii supérieure à 127 (c'est-à-dire en dessous de 0 dans un char signé), la chaîne copiée inclut le caractère ASCII non standard mais aucun autre caractère de la chaîne. Le premier caractère européen accentué est là où l'instruction sprintf abandonne, comme si la comparaison était if( char <= 0 ), fin.
si j'utilise
sprintf( target_string, "%s", string_table[N] );
avec la même chaîne, tout se copie correctement, comme si la comparaison était if( char == 0 ) alors fin.
Est-ce une fonctionnalité connue de sprintf? - c'est-à-dire que je ne devrais pas utiliser la version sprintf( target, source ) sans spécificateur de format car ce n'est pas une utilisation valide de la fonction - dans ce cas, pourquoi pas d'avertissements du compilateur? Ou peut-être que le compilateur légèrement modifié que Sony utilise en est la cause. Cela semble peu probable.