Pergunta

I have been given this school project. I have to alphabetically sort list of items by Czech rules. Before I dig deeper, I have decided to test it on a 16 by 16 matrix so I did this:

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

In another function I am trying to assign a char. Like this:

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

Everything is fine. Char is printed. But when I try to change it to

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

It says: Extraneous characters in wide character constant ignored. (Xcode) And the printing part is skipped. The main.c file is in UTF-8. If I try to print this:

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

It prints it out as written. I am not sure if I should allocate mem using wint_t or wchar_t or if I am doing it right. I tested it with both but none of them works.

Foi útil?

Solução

clang seems to support entering arbitrary byte sequences into to wide strings with the \x notation:

wchar_t c = L'\x2126';

This compiles without notice.

Edit: Adapting what I find on wikipedia about wide characters, the following works for me:

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

and prints nice characters in my terminal. Make sure that your teminal is able to interpret utf-8 characters.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top