C++11 缩短中文字符串以适合字符数组C++;

C++11 缩短中文字符串以适合字符数组C++;,c++11,C++11,我正在尝试在字符数组中匹配拼音字符串。例如,如果我有像下面这样的拼音字符串 string str = "转换汉字为拼音音"; // needs at least 25 bytes to store char destination[22]; strncpy(destination, str.c_str(), 20); destination[21] = '\0'; 因为汉字需要3个字节,所以我可以做strncpy(destination,str.c_str(),(20/3)*3);但是,如

我正在尝试在字符数组中匹配拼音字符串。例如,如果我有像下面这样的拼音字符串

string str = "转换汉字为拼音音"; // needs at least 25 bytes to store 
char destination[22];
strncpy(destination, str.c_str(), 20);
destination[21] = '\0'; 
因为汉字需要3个字节,所以我可以做strncpy(destination,str.c_str(),(20/3)*3);但是,如果str包含除中文以外的任何字符(在utf8编码中需要4个字节中的2个字节),则该逻辑将填充。 稍后,如果我尝试将目标转换为打印拼音字符,则只正确打印前6个汉字,并以十六进制打印2个字节。 有没有办法,我可以在复制到目的地之前缩短字符串,以便在打印目的地时,打印正确的中文字符(没有任何单独的十六进制字节)?使用POCO::Textendcoing或POCO::UTF8Encoding类

提前感谢。

除非创建自己的文本编码方式,否则一切都不会奏效。但即使在这种情况下,您也必须创建25个字符(不要忘了结尾是零!)数组来存储要正确打印的字符串,除非您创建自己的打印例程

也就是说,所需的工作量不能平衡额外的3个字节。 注意,代码实际上是C。C++中,你不使用这种代码。