簡體   English   中英

如何從(void *)字符串中打印單詞

[英]How do I print words from a (void *) string

我正在嘗試使用將文本(印地語或任何其他非英語語言)讀入數據結構的程序。 指向該文本的部分是一個void *指針。 如何使用fprintf打印此文本的子字符串?

編輯:

/* some text manipulation stuff. */
    wchar_t *origString = L"इसरो ने लॉन्च किया पहला 'मेड इन इंडिया' स्पेस शटल, PM बोले- ये असाधारण और प्रेरणादायक काम";
    void *pText = (void *)origString;
    wchar_t *newString = (wchar_t*)pText;
    fprintf(stdout, "Old String: %ls\n", origString);
    fprintf(stdout, "New string: %ls\n", newString);

在輸出中,我僅看到無法打印的特殊字符(我期望的不是UTF-8編碼)。

編輯:
我正在使用一些第三方代碼讀取文本(使用非英語語言)並進行進一步處理。 我還需要在控制台上顯示此文本。
這是第三方代碼正在做的事情:
1.獲取文件的大小。
2.(通過fread )讀入整個文本,並使用void *指向此blob。
3.我正在嘗試弄清楚如何處理此文本-我該如何打印?

除了在基於UTF-8的語言環境中,任意寬字符字符串都不能轉換為可以輸出的內容。 在程序啟動時,初始語言環境為“ C”。 您必須調用setlocale(LC_CTYPE,"")來激活字符編碼的默認語言環境,在現代系統中,該語言環境應基於UTF-8。 (正如我最初所說的,您可以選擇使用setlocale(LC_ALL,"")來激活所有語言環境類別,不僅是字符編碼,而且還有很多后果,您可能不希望潛在地破壞所有使用小數點的函數。 )

void * ,並且強制轉換與您的問題無關。 在指針類型之間進行轉換不會轉換它們所指向的數據。

打印此文本的子字符串

只需根據需要強制轉換指針並提供子字符串長度:

FILE *out; /* init FILE */
void *pointer; /* init pv */;
size_t offset; /* start of substring */
unsigned length; /* substring length */
fprintf(out, "%*s", length, (char *) pointer + offset);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM