gpt4 book ai didi

c - sprintf(target, source) 与 sprintf(target, "%s", source) 有不同的行为;

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:43 26 4
gpt4 key购买 nike

在特定 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 ) then finish。

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

最佳答案

如果你打电话

sprintf( target_string, string_table[N] );

然后 string_table[N] 将被解释为“格式字符串”(如果其中有 '%',您的应用程序将可怕地死掉。不要这样做)

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

关于c - sprintf(target, source) 与 sprintf(target, "%s", source) 有不同的行为;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16187910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com