我正在研究纯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编译器是否需要使用特殊标志或选项来处理宽字符?
或其他什么?
感谢您的帮助。