1
我正在處理與處理字符串爲wchar_t數組的庫。我需要將它們轉換爲char數組,以便我可以將它們交給Python(使用SWIG和Python的PyString_FromString函數)。顯然不是所有的寬字符都可以轉換爲字符。根據對wcstombs的文件,我應該能夠做到像測試wchar_t *爲可轉換字符
wcstombs(NULL, wideString, wcslen(wideString))
來測試unconvertable字符字符串 - 它應該返回-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 * s轉換爲Python unicode字符串的方式,那將是值得歡迎的。 :) 謝謝!
有人指出我忘了寫字符串的終止符。將for循環更改爲size - 1,然後將'\ 0'作爲最後一個字符,使得wcstombs自行運行。很抱歉浪費你的時間!儘管如果有人知道比通過char更直接的轉換,那仍然很棒。 – Derakon
它可能不是問題,但應該將0作爲wcstombs的計數參數。這意味着輸出緩衝區的字節大小爲NULL。 –