기본적으로 나는 대략 이와 같이 보이는 기능을 가지고 있으며 나는 밖으로 나가야합니다.함수에서 동적 C 스타일 문자열을 반환 하시겠습니까?
const char* UTF16ToUTF8(const wchar_t *in) {
int tmp = wcslen(in);
int size_needed = WideCharToMultiByte(CP_UTF8, 0, &in[0], (size_t)tmp, NULL, 0, NULL, NULL);
std::vector<char> out;
out.resize(size_needed);
WideCharToMultiByte(CP_UTF8, 0, &in[0], (size_t)tmp, &out[0], size_needed, NULL, NULL);
return &out[0];
}
분명히 out은 참조 할 때 참조 해제됩니다. 내 옵션은 무엇입니까? 이 함수를 그렇게 호출 할 수 있어야합니다. 나는 절대적으로 스택에 머물고 싶습니다.
utf8outputfile << UTF16ToUTF8(wchar_tString) << endl;
fprintf(utf8outputfile, "%s", UTF16ToUTF8(L"Mmm Mmm Unicode String κόσμε"));
return UTF16ToUTF8(wchar_tString);
나는'std :: vecor'로 그렇게 할 수 있는지 몰랐다. 'WideCharToMultiByte'에'& out [0]'을 멀티 바이트 안전으로 전달합니까? 좋은 양식? – Sodved
@Sodved no - 함수가 반환 될 때 벡터가 소멸되고 배킹 할당이 해제되기 때문에 블로우 업됩니다. 따라서이 함수의 결과는 유효한 할당을 가리 키지 않습니다. 벡터가 함수보다 오래 지속된다면 문자 벡터를 사용하여 문자열을 나타낼 수 있습니다 (대다수의 경우 std :: string이 더 적합 함). – justin
@Sodved 그러나 vector는 연속적인 할당을 보장합니다. '& vec [0]'을 c 배열로 취급하는 것이 좋습니다. – justin