wchar_t *到char *转换问题

时间:2011-12-24 21:26:20

标签: c++ char wchar

我在wchar_t*char*转化时遇到问题。

我从wchar_t*结构中获取FILE_NOTIFY_INFORMATION字符串,由ReadDirectoryChangesW WinAPI函数返回,因此我认为该字符串是正确的。

假设wchar字符串是" New Text File.txt" 在Visual Studio调试器中将鼠标悬停在节目中的变量" N"和一些未知的中文字母。虽然在手表中正确表示了字符串。

当我尝试使用wcstombs

将wchar转换为char时
wcstombs(pfileName, pwfileName, fileInfo.FileNameLength);

它只会将两个字母转换为char*(" Ne"),然后生成错误。

在此块的函数_wcstombs_l_helper()中wcstombs.c中的一些内部错误:

if (*pwcs > 255)  /* validate high byte */
{
    errno = EILSEQ;
    return (size_t)-1;  /* error */
}

它不会被视为异常。

可能是什么问题?

2 个答案:

答案 0 :(得分:0)

我的猜测是你传递的宽字符串无效或定义不正确。

pwFileName如何定义?您似乎将FILE_NOTIFY_INFORMATION结构定义为fileInfo,那么为什么不使用fileInfo.FileName,如下所示?

wcstombs(pfileName, fileInfo.FileName, fileInfo.FileNameLength);

答案 1 :(得分:0)

你得到的错误说明了一切,它找到了一个无法转换为MB的字符(因为它在MB中没有任何表示),source

  

如果wcstombs遇到宽字符,则无法转换为   多字节字符,它返回-1强制转换为类型size_t并设置errno   到EILSEQ

在这种情况下,你应该避免“假设”输入,并给出一个失败的实际测试用例。