Newsgroup: it.comp.lang.c
Titolo: warning: multi-character character constant

Ciao! Devo convertire le lettere accentate di una stringa nelle
corrispondenti lettere non accentate. Quando compilo con -Wall pero' mi
da':
warning: multi-character character constant
il problema e' il charset per caso? come faccio a non farmi dare questo
warning? La cosa piu' grave pero' non sono i warning, ma il fatto che il
prog non funziona! Tutte le altre operazione le esegue egregiamente, ma le
lettere "convertite" non le scrive proprio: ad esempio della stringa "licia
colò", invece di dare in stdout "licia colo", come dovrebbe, da' "licia col 
", con due spazi.

> warning: multi-character character constant
Se ci "illumini" con la riga di codice incriminata, magari ti diamo dei
consigli.
--- bye

 consigli.
Chiedo scusa, eccola qua' :)
-------------------
switch (c) {
        case 'à':
                string[i] = "a";
                break;
        case 'è': case 'é':
                string[i] = "e";
                break;
        case 'ì':
                string[i] = "i";
                break;
        case 'ò':
                string[i] = "o";
                break;
        case 'ù':
                string[i] = "u";
                break;
        default:
                break;
}
-------------------
Ho anche provato con sprintf(string + i, "a") anche se sapevo fin
dall'inizio che non sarebbe cambiato molto, e difatti non e' cambiato
nulla... :) Quando va a stampare sullo schermo, stampa due spazi al posto
della lettera non accentata.

l'output del gcc e' questo:
[mimmo@localhost mimmo]$ gcc -Wall p.c -o p
p.c:94:38: warning: multi-character character constant
p.c:97:38: warning: multi-character character constant
p.c:97:49: warning: multi-character character constant
p.c:100:38: warning: multi-character character constant
p.c:103:38: warning: multi-character character constant
p.c:106:38: warning: multi-character character constant
[mimmo@localhost mimmo]$
Ovviamente le righe incriminate sono quelle che ho scritto nel post
precedente: la 94 e' case 'à', la 97 e' case 'è' e cosi' via.

>                 string[i] = "a";
Dimmi, string[] è per caso una
char *string? oppure uan char string[100]? In ogni caso prova a mettere 'a'
(e poi lo stesso per le altre)
--- bye

 In ogni caso prova a mettere 'a' (e poi lo stesso per le altre)
Funziona, sia con string[i] = ... sia con sprintf(string + i, ...). Suppongo
che il problema sia il charset, vero?

 che il problema sia il charset, vero?
Fa una prova... Nei vari case sostituisci
'à' con 'a', 'è' con 'e' ecc. e poi prova a vedere se ti dà dei warning.
--- bye

 '� con 'a', '� con 'e' ecc. e poi prova a vedere se ti d�dei warning.
ho provato, ho messo nei case 'a', 'e', ecc, e come lettere da mettere in
string[i] roba tipo y, z, ecc, per distinguerle, e funziona bene: non da'
nessun warning e nell'output le lettere a, e, i, o, u, vengono sostituite
con y, x, j, ecc.

 con y, x, j, ecc.
Ho anche provato a utilizzare wchar_t ma mi dice cose strane. Quando compilo
mi dice
error: int-array initialized from non-wide string
in corrispondenza della linea 
wchar_t *string = "à è ì ò ù";
ma come?!? non ci sto capendo piu' un cazzo! aiuto!

> ma come?!?
prova a sostituire le lettere accentate con il relativo codice ascii..

 ha scritto:

AFAICS dipende dal tuo locale, non e` che come charset usi UTF8?
Luca
-- 
Home: 
http://kronoz.cjb.net
Non sempre quello che viene dopo e` progresso.
Alessandro Manzoni

> AFAICS dipende dal tuo locale, non e` che come charset usi UTF8?
e come faccio a vederlo e in caso a cambiarlo?

Invece di:
        case 'à':
                string[i] = "a";
                break;
Prova con:
        case 'à':
                string[i] = 'a';
                break;
Come scrivi tu stai tentando di assegnare l'indirizzo delle _stringa_ "a" in
un char.
Usando gli apici singoli questo non accade; assegni un char ad un char.

 ha scritto nel messaggio
news:Y7Vdc.119579$Kc3.3...@twister2.libero.it...

...ricodati di terminare correttamente "string" con '\0'.

 e come faccio a vederlo e in caso a cambiarlo?
locale, da shell. Sono normali variabili, le manipoli come qualunque
altra variabile sulla tua shell.
Luca
-- 
Home: 
http://kronoz.cjb.net
"It is more complicated than you think"
                -- The Eighth Networking Truth from RFC 1925