Newsgroup: it.comp.os.linux.development
Titolo: Errore stringa

ciao a tutti
 ho il seguente problema, devo realizzare un elenco telefonico client
 server con le code di messaggi, quando mando una stringa dal client
con
 la msgsnd viene ricevuta correttamente dal processo server con la
 msgrcv, quando stampo la stringa a video, per vederne il contenuto, mi
 viene stampato questo errore:
Invalid or incomplete multibyte or wide character
Non so proprio cosa sia ... all ' inizio ho pensato a dei parametri
 sbagliati della msgrcv ma è solo una supposizione.
 Grazie per la gentile risposta.

stefano.p...@gmail.com
 writes:

raramente ho visto delle informazioni piu' incomplete.  possibilita':
1) sbagli a mandare la stringa (immagino una std::string in C++, dal
   nome)
2) sbagli a ricevere la stringa
3) sbagli a scrivere la stringa
4) hai corrotto lo stack/lo heap
5) la dea ti odia
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg

stefano.p...@gmail.com
 wrote:

stai inviando caratteri multi-byte (UTF-8, UTF-16, etc.) ma non stai
usando la wide char API; oppure stai inviando byte sul filo ma stai
leggendo caratteri.
senza sapere che cosa stai usando (linguaggio, librerie, piattaforma)
non si può essere più precisi.
altra cosa: se è un compito non aspettarti che te lo si risolva noi.
Ciao,
 Emmanuele.

 altra cosa: se è un compito non aspettarti che te lo si risolva noi
Si è un compito e non tendo mai a fare elemosina ma a cercare di
risolvere il problema da solo. Se avessi voluto farvelo risolvere avrei
postato direttamente il testo dell'esercizio. :D

 5) la dea ti odia
Questo è sicuro... con la sfiga che ho... :'(

 Ok grazie mille, farò una piccola ricerca su google.
per intenderci meglio: se stai inviando "foo" sul filo, e il tuo locale
è impostato a UTF-8, allora stai mandando roba codificata in UTF-8; fino
a che si tratta di caratteri ASCII come "foo", allora sei a posto - ma
se "foo" diventa "fòò" ecco che arrivano i problemi in numero di
millantamila.
il consiglio è usare
#include <locale.h>
...
int
main (int argc, char *argv[])
{
  setlocale(LC_ALL, "C");
  ...
}
e usare *solo* caratteri ASCII.
se vuoi usare UTF-8, comincia a pensare di usare GLib e GIOChannel
invece delle raw socket.
ciao,
 Emmanuele.

 invece delle raw socket.
Ho provato ad usare questa funzione e ho usato solo caratteri ASCII, ma
niente da fare mi da sempre lo stesso errore, questo è il prototipo
della stringa che invio:
dsasdasddfs|qeweqweq|3242454
Non so proprio dove mettere le mani...

 
Probabilemnte passi il buffer a sprintf senza assicurarti che sia terminato 
con un NULL. (msgrcv, ovviamente, non ce lo mette.)
Max

 leggendo caratteri.
Occhio, multi-byte e wide char non sono la stessa cosa.
Luca
-- 
Home: 
http://kronoz.cjb.net
Runtime error 6D at f000:a12f : user incompetente

> Occhio, multi-byte e wide char non sono la stessa cosa.
ah... mi potresti spiegare la differenza !?

 ah... mi potresti spiegare la differenza !?
Con multi-byte si intende una sequenza di uno o più byte che reppresenta
un carattere nel c.d. charset esteso, con due vincoli:
- tutti i caratteri del c.d. charset base (praticamente i simboli ASCII)
  devono essere rappresentabili con un singolo byte
- il byte 0x00 è il terminatore di stringa
In pratica vuol dire che è possibile trattare (entro certi limiti) una
stringa multibyte come una normale "stringa" C. UTF-8 è un esempio di
codifica che rientra in questa definizione.
Un wide char, invece, è la rappresentazione di un carattere del charset
completo codificata su sizeof(wchar_t) byte. In questo caso il singolo
byte a zero non indica più il terminatore di stringa; va da se che una
sequenza di wchar_t non può essere trattata come normale stringa C, ha
bisogno di una API ad hoc. Un esempio di codifica è UCS-2 (o 4).
Piccola nota: supponendo sizeof(wchar_t) == 4, il wide char potrebbe
contenere il carattere codificato con UTF-8 a cui è stato opportunamente
aggiunto del padding[1] ;)
Luca
[1] Non che sia una cosa particolarmente saggia...
-- 
Home: 
http://kronoz.cjb.net
"Su cio` di cui non si puo` parlare e` bene tacere".
 Ludwig Wittgenstein