从Platform :: String ^到char *的转换大小

时间:2013-06-05 15:37:17

标签: character-encoding windows-runtime c++-cli

我想编写一个函数,将一个字符串从Platform :: String ^对象传递给我自己的一个对象。为了做到这一点,我需要从Platform :: String ^对象获取一个char *。我不确定如何确定我需要的缓冲区的大小。

我希望做这样的事情:

void PlatStrToCustomStr(Platform::String^ source, CustomStrObject& destination)
{

    int bufferSize = (source->Length()*2)+1; //How do I know how big?
    char* buffer = new char[bufferSize]; 
    size_t* result;
    wcstombs_s(result, buffer, bufferSize, source->Begin(), bufferSize);

    destination.copy(buffer);
    free(buffer);
}

有没有办法让我知道bufferSize有多大?

我知道还有其他类似问题,但我没有找到代码中这个具体问题的答案。

1 个答案:

答案 0 :(得分:2)

如果您阅读wcstombs_s的引用,您会看到第二个参数可以是NULL。然后,您将获得返回的结果字符串所需的字节数。您还需要将第三个参数设置为零,以使其起作用。


但是你有一个更严重的问题,因为你传递了一个未初始化的指针作为第一个参数。您应该将result声明为普通(非指针)变量,并使用address-of运算符&通过引用传递参数:

size_t result = 0;
wcstombs_s(&result, ...);