我想编写一个函数,将一个字符串从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有多大?
我知道还有其他类似问题,但我没有找到代码中这个具体问题的答案。
答案 0 :(得分:2)
如果您阅读wcstombs_s
的引用,您会看到第二个参数可以是NULL
。然后,您将获得返回的结果字符串所需的字节数。您还需要将第三个参数设置为零,以使其起作用。
但是你有一个更严重的问题,因为你传递了一个未初始化的指针作为第一个参数。您应该将result
声明为普通(非指针)变量,并使用address-of运算符&
通过引用传递参数:
size_t result = 0;
wcstombs_s(&result, ...);