Hp-Ux C编译器和宽字符

时间:2012-05-30 16:20:28

标签: c linux unix

我正在研究纯ANSI C中的一个简单程序,它允许我从单词中删除西班牙语重音。为此,我使用的是C数据类型wchar_t和setlocale(...)函数。

我在Fedora Linux(gcc版本4.5.1)中正常运行该程序。我的工作基于一个小维基百科的例子:

#include <wchar.h>
#include <locale.h>
...
setlocale(LC_ALL, "");
...
wchar_t myString1[] = L"♠♣♥♦";
wchar_t myString2[] = { 0x2660, 0x2663, 0x2665, 0x2666, 0x0000 };

wprintf(L"This is a long string: %ls \n", myString1);
wprintf(L"This is a long string: %ls \n", myString2); 
...

两个wprintf调用的输出是:

This is a long string: ♠♣♥♦
This is a long string: ♠♣♥♦

Hp-Ux 11.1上的相同代码无法正常工作。它崩溃了:

wchar_t myString1[] = L"♠♣♥♦";  

但是如果我评论这一行并且只使用十六进制版本就可以正常工作。

另外,例如,如果我使用复制功能:

wchar_t* myString3 = (wchar_t*)malloc(sizeof(wchar_t)*6);
wcscpy(myString3, L"Elías");

它也不起作用。我认为问题在于“任何”陈述。

两个版本的代码之间的唯一区别是在Hp-Ux中我不得不放:

setlocale(LC_ALL, "en_US.utf8");  

Hp-Ux cc编译器是否需要使用特殊标志或选项来处理宽字符?

或其他什么?

感谢您的帮助。

0 个答案:

没有答案