了解将使用哪个swprintf(或再次将char *string转换为wchar_t *)

我试图将一个char *string转换为wchar_t *。 我已经看到这个问题已经被问了很多次,没有解决/便携式答案/解决scheme。

正如这里所build议的,swprintf对我来说似乎是正确的解决scheme,但我发现有两个版本! 即:

  1. http://www.cplusplus.com/reference/cwchar/swprintf/ (第二个参数是string容量)
  2. http://msdn.microsoft.com/en-us/library/ybk95axf%28v=vs.71%29.aspx (第二个参数已经是格式string)

我的程序看起来像这样:

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. 有没有办法知道在编译时我必须select哪两个接口?
  2. 有没有一种替代, 便携的方式来转换char *string在wchar_t *? 例如,如果有必要,我可以通过C ++ std库(无C ++ 11)

编辑

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

我会稍后检查,如果我可以使用Boost格式库来尝试解决这个…

Solutions Collecting From Web of "了解将使用哪个swprintf(或再次将char *string转换为wchar_t *)"

由于我可以使用C ++,效率不是问题,所以我可以使用下面的代码:

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

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

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

在这里测试

来自basic_string构造函数方法的文档:

 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.