我有一些以多字节UTF8格式存储的字符串,我想将它们以固定宽度的空间打印到控制台。我这样做是:
wprintf(L"////////////// BLOCK 1 /////////////// ////////////// BLOCK 2 /////////////// ////////////// BLOCK 3 ///////////////\n");
wprintf(L"// %-32S // // %-32S // // %-32S //\n", mymemcard[0].filename, mymemcard[1].filename, mymemcard[2].filename);
wprintf(L"// %-32S // // %-32S // // %-32S //\n", mymemcard[0].titleUTF, mymemcard[1].titleUTF, mymemcard[2].titleUTF);
wprintf(L"////////////////////////////////////// ////////////////////////////////////// //////////////////////////////////////\n\n");
文件名变量采用ASCII格式并且可以正常工作,但是如果titleUTF变量包含任何多字节字符,它们的打印时间将太短。我认为这是因为wprintf函数在计算宽度时包括多字节字符的每个字节。参见下面的输出:
THPS2标题中的“破折号”字符实际上是半角日语字符,在这种情况下,这就是打破wprintf函数的原因。
我已经尝试使用“%-32lS”,但是这会将垃圾信息输出到控制台,并且我已经尝试了小写的“ s”,但是这也会打印垃圾信息。关于如何使用多字节字符获得固定宽度打印的任何想法吗?
我认为,您将无法修复wprintf。所以,有一个简单/粗略的解决方案:(:
void PrintFilenameLine(const wchar_t* line1, const wchar_t* line2const wchar_t* line3) {
// Detect sizes of lines
// Generate output string
}