문자열을 wchar_t 배열로 처리하는 라이브러리와 이야기하고 있습니다. 이 배열을 char 배열로 변환하여 파이썬 (SWIG 및 Python의 PyString_FromString 함수 사용)으로 넘길 수 있도록해야합니다. 분명히 모든 와이드 문자가 문자로 변환 될 수있는 것은 아닙니다. 내가한다고 wcstombs에 대한 설명서에 따르면 unconvertable 문자 문자열을 테스트하는변환 가능한 문자에 대한 wchar_t * 테스트
wcstombs(NULL, wideString, wcslen(wideString))
같은 것을 할 수 있기를 - 반환 -1 어떤이있는 경우로했다. 그러나, 내 테스트 케이스에서는 항상 -1을 반환합니다. 여기 내 테스트 기능입니다 :
void getString(wchar_t* target, int size) {
int i;
for(i = 0; i < size; ++i) {
target[i] = L'a' + i;
}
printf("Generated %d characters, nominal length %d, compare %d\n", size,
wcslen(target), wcstombs(NULL, target, size));
}
이 같은이 생성되어 출력 : 내가 무슨 일을하고 있어요
Generated 32 characters, nominal length 39, compare -1
Generated 16 characters, nominal length 20, compare -1
Generated 4 characters, nominal length 6, compare -1
어떤 생각?
관련 노트에 wchar_t *에서 Python 유니 코드 문자열로 직접 변환하는 방법을 알고 있다면 환영 할 것입니다. :) 감사!
문자열에 터미네이터를 쓰는 것을 잊어 버렸습니다. for 루프를 크기 -1로 변경 한 다음 마지막 문자로 '\ 0'을 쓰면 wcstombs 자체가 작동합니다. 시간을 낭비해서 미안해! 비록 누군가가 char를 통해가는 것보다 더 직접적인 변환을 알고 있다면, 그것은 여전히 굉장 할 것입니다. – Derakon
문제는 아니지만 wcstombs의 count 매개 변수로 0을 전달해야합니다. 이것은 출력 버퍼의 크기 (바이트)를 의미하며 NULL입니다. –