PDA

View Full Version : [C]Una stringa un pò..particolare


noiseimpera
20-01-2011, 20:11
salve!

da specifiche mi è richiesto di produrre una stringa di questo tipo:

nome_utente\0messaggio

col terminatore di stringa a dividere la stringa.
non capisco come potrei realizzarla. ho provato a farla in questo modo:


sprintf(msg_snd->buffer,"[%s]\0%s",user,msg);

ma in fase di compilazione mi lancia un warning(embedded \0). ho provato anche così:

sprintf(msg_snd->buffer,"[%s]%s",user,msg);
punt=(msg_snd->buffer)+strlen(user)+1;
punt='\0';

ma sembra che la cosa non sortisca alcun effetto:in seguito, nello splittare, mi prende il terminatore di stringa finale.

bobbytre
20-01-2011, 20:22
sprintf(msg_snd->buffer,"[%s]%c%s",user,0,msg);

WarDuck
20-01-2011, 21:16
E poi come la tratti?

Il terminatore è appunto un terminatore e dovrebbe stare alla fine della stringa, molte funzioni C si aspettano questo.

Consiglio caldamente a chiunque ti abbia dato queste specifiche di fare un po' di ripasso di C.

bobbytre
21-01-2011, 00:16
E poi come la tratti?

Il terminatore è appunto un terminatore e dovrebbe stare alla fine della stringa, molte funzioni C si aspettano questo.

Consiglio caldamente a chiunque ti abbia dato queste specifiche di fare un po' di ripasso di C.

In realtà si usa molto spesso si usa il carattere \0 per separare le stringhe , mentre come delimitatore finale si usa il doppio \0\0
Separare le stringhe o accedere alle successive risulta banale se si usano i puntatori...

Tommo
21-01-2011, 00:52
A volte può avere senso: per esempio m'è capitato di ricevere in ingresso il contenuto di un file contenente un sacco di nomi e cognomi; in certe condizioni è possibile evitare di duplicare la memoria e allocare ai vari oggetti solo puntatori all'inizio di ogni nome/cognome, sostituendo gli spazi con dei terminatori.

Ovviamente è un'hack epico, ma trattandosi di C tutto fa brodo :D