2011-12-09 34 views
0

我已經獲得這個學校項目。我必須按捷克語規則按字母順序排列項目列表。之前,我越挖越深,我決定來測試它在一個16×16矩陣,所以我這樣做:無法將寬字符分配到寬字符字段。

typedef struct {  
wint_t **field; 
}LIST; 

... 

setlocale(LC_CTYPE,NULL); 

.... 

list->field=(wint_t **)malloc(16*sizeof(wint_t *)); 
for(int i=0;i<16;i++) 
list->field[i]=(wint_t *)malloc(16*sizeof(wint_t)); 

在其他功能我想指定一個字符。像這樣:

sorted->field[15][15] = L'C'; 
wprintf(L"%c\n",sorted->field[15][15]); 

一切都很好。字符被打印。但是當我嘗試將其改爲

sorted->field[15][15] = L'Č'; 

它說:寬字符常量中的無關字符被忽略。 (Xcode)並且打印部分被跳過。 main.c文件是UTF-8。如果我試圖打印此:

printf("ěščřžýááíé\n"); 

它按照書面打印出來。我不確定是否應該使用wint_t或wchar_t分配內存,或者我是否正確地分配內存。我測試了它們,但都沒有工作。

+0

複製[在寬字符常量中使用寬字符常量獲取「寬字符常量中的無關字符忽略」錯誤](http://stackoverflow.com/questions/3343553/using-wide-character-constants-with-clang-gets -extraneous-characters-in-wide-ch) - 重要的是clang不支持這種行爲。如果你真的需要它,試試GCC。 'printf()'的作用是因爲編譯器不必關心字符串中的字節。當你的終端看到這個序列*它*做正確的事情。 –

+0

@CarlNorum嗯,我只是用gcc和簡單的代碼嘗試過它,並沒有打印任何東西。 http://pastebin.com/SZmTekYW – rojcyk

回答

0

鐺似乎支持進入任意字節序列插入到寬字符串與\x符號:

wchar_t c = L'\x2126'; 

這將編譯,恕不另行通知。

編輯:適應我找到wikipedia about wide characters,對我下面的作品:

#include <stdio.h> 
#include <wchar.h> 
#include <stdlib.h> 
#include <locale.h> 

int main(void) 
{ 
    setlocale(LC_ALL,""); 
    wchar_t myChar1 = L'\x2126'; 
    wchar_t myChar2 = 0x2126; // hexadecimal encoding of char Ω using UTF-16 
    wprintf(L"This is char: %lc \n",myChar1); 
    wprintf(L"This is char: %lc \n",myChar2); 
} 

,並打印在我的終端漂亮字符。確保你的終端能夠解釋utf-8字符。

+0

所以,如果我理解它正確的Xcode(在獅子)使用鏗鏘。 Lion更新支持GCC。但問題是,如果我嘗試使用終端和GCC(http://pastebin.com/SZmTekYW)進行編譯。它不打印任何東西。即使我使用\ x2118。 – rojcyk

+0

@rojcyk也許這只是錯誤的字符,請參閱我的編輯。 –

+0

謝謝,我想我現在明白了:) – rojcyk