了解将使用哪个swprintf(或再次,将char *字符串转换为wchar_t *)

时间:2013-07-18 07:05:32

标签: c++ c windows unix mingw

我正在尝试将char *字符串转换为wchar_t *。我已经多次询问过这个问题,没有解决/便携式答案/解决方案。

根据建议here,swprintf对我来说似乎是正确的解决方案,但我发现那里有两个版本!即:

  1. http://www.cplusplus.com/reference/cwchar/swprintf/(第二个参数是字符串容量)
  2. http://msdn.microsoft.com/en-us/library/ybk95axf%28v=vs.71%29.aspx(第二个参数已经是格式字符串)
  3. 我的程序看起来像这样:

    const unsigned int LOCAL_SIZE = 256;
    char* myCharString = "Hello world!";
    wchar_t myWCharString[LOCAL_SIZE];
    

    此时:

    swprintf(myWCharString,LOCAL_SIZE,L"%hs",myCharString );
    

    或:

    swprintf(myWCharString,L"%hs",myCharString );
    

    切换编译器(mingw 4.5.2< - > mingw 4.7.2)我确实得到了不同的版本,所以在一个例子中编译时出错! 我的问题:

    1. 有没有办法知道在编译时我必须选择哪两个接口?
    2. 是否有另一种可移植方法来转换wchar_t *中的char *字符串?我可以通过C ++ std库(没有C ++ 11),例如必要时
    3. 修改

      std::wstring_convert似乎不适用于我的编译器(4.5.2和4.7.2,包括#include <locale>

      如果我可以使用Boost格式库试图解决这个问题,我稍后会退房......

1 个答案:

答案 0 :(得分:2)

由于我可以使用C ++,效率不是问题,我可以使用以下内容:

std::wstring(myCharString,myCharString+strlen(myCharString)).c_str()

如果需要加wchar_t*,可能是这样的:

strcpy(myWCharString,std::wstring(myCharString,myCharString+strlen(myCharString)).c_str() );


经过测试 here

来自basic_string constructor methods的文档:

first, last
    Input iterators to the initial and final positions in a range. 
    The range used is [first,last), which includes all the characters
    between first and last, including the character pointed by first but not
    the character pointed by last.
    The function template argument InputIterator shall be an input iterator type
    that points to elements of a type convertible to charT.
    If InputIterator is an integral type, the arguments are casted to the
    proper types so that signature (5) is used instead.