0

我想编写一个函数,将字符串从 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 必须有多大?

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

4

1 回答 1

2

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


但是您有一个更严重的问题,因为您将未初始化的指针作为第一个参数传递。您实际上应该声明result为普通(非指针)变量并使用地址操作符&通过引用传递参数:

size_t result = 0;
wcstombs_s(&result, ...);
于 2013-06-05T15:46:08.333 回答