如何从(void *)字符串中打印单词

时间:2016-05-23 05:25:25

标签: c printf void

我正在尝试使用将文本(印地语或任何其他非英语语言)读入数据结构的程序。指向此文本的部分是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.我试图弄清楚如何操纵这个文本 - 我怎么把它打印出来?

2 个答案:

答案 0 :(得分:5)

除了基于UTF-8的语言环境之外,任意宽字符串都不能转换为可以输出的内容。在程序启动时,初始语言环境是&#34; C&#34;。您必须调用tempList.removeAll(tempList2); 来激活字符编码的默认语言环境,这在现代系统上应该是基于UTF-8的。 (正如我最初所说的那样,您也可以使用setlocale(LC_CTYPE,"")来激活所有区域设置类别,而不仅仅是字符编码,但是这可能会产生很多后果,可能会破坏所有使用小数点的函数。)< / p>

setlocale(LC_ALL,"")并且演员阵容与您的问题无关。在指针类型之间转换不会转换它们指向的数据。

答案 1 :(得分:1)

  

打印此文本的子字符串

根据需要投射指针并提供子字符串长度:

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);