Newsgroup: it.comp.lang.c
Titolo: stringa con carattere ascii 0: come fare?

ciao a tutti, mi scuso per le mie domande ma sono arrugginito con il C,
e causa tesi, devo implementare una parte in questo linguaggio.
a perte queste scuse, il problema e' il seguente:
ho bisogno di una stringa che contenga il carattere corrispondente al codice
0.
Ovviamente non funziona nulla, essendo lo 0 il carattere di fine stringa.
come si gestisce una situazione del genere?
grazie... :-(
giuseppe

 come si gestisce una situazione del genere?
Una stringa di caratteri '\0' e`, come tu sottolinei, una parziale 
contraddizione in termini. Se, pero`, abbandoni il termine "stringa" per 
"array di caratteri", allora la funzione calloc() puo` esserti d'aiuto.
<cons>
	$ man calloc
	NAME
	     calloc - allocate clean memory (zero initialized space)
	SYNOPSIS
	     #include <stdlib.h>
	     void *
	     calloc(size_t nmemb, size_t size)
	DESCRIPTION
	     The calloc() function allocates space for an array of nmemb
	     objects, each of whose size is size. The space is
	     initialized to all bits zero.
	RETURN VALUES
	     The calloc() function returns a pointer to the allocated
	     space if successful; otherwise a null pointer is returned.
	SEE ALSO
	     malloc(3),  realloc(3),  free(3)
</cons>
-- 
Baci,
Mony

 0.
infatti il codice ascii che corrisponde al carattere 0
non è 0, ma '0'.
mi spiego (non compilato):
char stringa[2];
void main(void)
    {
    stringa[0]='0';    //    o anche 'A', stampera' A
    stringa[1]=0;    //    terminazione
    printf("%s \r\n",stringa);    //    stampa la stringa
    printf("%i \r\n",stringa[0]);    //    stampa come intero, per
curiosita',
                                            //     il codice ascii del
carattere 0
    }

    }
In alternativa se non vuoi usare la calloc() perche' hai gia' la
stringa un semplice ciclo:
<CODE>
int i;
for (i=0; i<ARRAY_SIZE; i++)
    array[i] = 0;
</CODE>
Ovviamente se la stampi come stringa non ha molto senzo :)
Mox

 </CODE>
vomiti un codice che mette pari a 0
(non '0' !)
ogni byte di una stringa.
con il risultato di avere una poco didattica
stringa che non contiene nulla, perche' il suo primo
carattere e' gia' un carattere di terminazione.
e non si capisce come questo problema possa risolvere,
in alcun modo , il post iniziale.
ciao.

carattere e' gia' un carattere di terminazione.
Qui sei tu che non hai capito cosa voleva.
Si che non ha senso come stringa, ma ha senso come array di char
(spero tu sappia che sono 2 cose diverse stringhe e array di char).
Secondo te le soluzioni che hanno dato gli altri (usare la calloc) non
facevano esattamente quello che ho detto io?
Mox

 facevano esattamente quello che ho detto io?
si', e penso che hanno sbagliato.
la domanda originale e' ben chiara:
subject "stringa con carattere ascii 0"
e nel corpo del messaggio
"ho bisogno di una stringa che contenga il carattere corrispondente al
codice
0."
secondo me non da' adito a nessuna doppia interpretazione,
se conosci bene il C come sostieni queste frasi non possono che significare
una cosa sola:
il codice ascii di 0 e' 48.
colui che ha postato era confuso perche' assegnava
al carattere il valore 0 e non 48.
sempre colui che ha postato dice :
"Ovviamente non funziona nulla, essendo lo 0 il carattere di fine stringa.
come si gestisce una situazione del genere?"
il che dimostra che il postatore sa benissimo
che 0 e' il carattere di terminazione, e che se volesse
una stringa di zeri saprebbe benissimo come farsela da solo...
ma forse non e' questo che gli  serve, non ti e' venuto il dubbio?
concludento, la mia vis polemica era rivolta a quelli che, come
te, irrompono nei thread facendo le pulci ai vari
standard e convenzioni (che me ne frega dello standard,
se sto cercando di aiutare una persona scrivendo un post al volo mentre
sto lavorando?) e non si curano nemmeno di leggere
attentamente il post iniziale.

attentamente il post iniziale.
Io sono intervenuto a correggerti solo dove avevi sbagliato (visto che
non e' didattico l'errore).
Per quando riguarda il resto del codice non ho detto che era
sbagliato, ma solo che SECONDO ME lui voleva altro. Rileggendo a
posteriori i tuoi messaggi mi hai convinto del contrario.
Se e' contrario allo standard e' un errore (e nel caso specifico
errore per vari motivi che non sto' a riprendere). Io ho corretto
l'errore e ho espresso un mio parere.
Hai fatto bene ad attaccare il mio parere (che come ho detto si e'
rivelato sbagliato e in questo post ho cercato appunto di scusarmi)
non hai affatto ragione ad attaccare la mia correzione che e' giusta.
Ulteriori discussioni del genere please via e-mail, stiamo andando OT
su cose che non c'entrano piu' con il C.
Mox :)

sono stato uno stupido anche io a cercare
il flame.
pace.


Make love, not war :)
Mox

 il codice ascii di 0 e' 48.
Se conosci bene il C e se vogliamo fare propri i pignolini,
domande come questa vogliono dire che ti serve il carattere 
corrispondente al codice 0.
La frase "codice 0" non vuol dire "codice di '0'".
Il carattere corrispondente al codice 0, in C, e' '\0'.
Se si vuol dire '0' allora bisogna dire il carattere, corrispondente
al codice 48.
Come vedi l'interpretazione e' si', una sola, ma la tua, purtroppo,
e' quella sbagliata.
Se il nostro amico vuole una stringa di zeri (codice 48), allora 
ha formulato male la domanda.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha formulato male la domanda.
no, no! io "volevo" proprio una stringa che potesse contenere anche
terminatori!!
cmq mi dispiace x tutto 'sto casino!
anche se penso di essermi espresso al meglio. :-)
per l'inghippo che c'era vedi il mio post di risposta a Mony
--
Giuseppe

 "array di caratteri", allora la funzione calloc() puo` esserti d'aiuto.
ciao e grazie per l'aiuto, anche se poi ho risolto diversamente!
il problema e' nato usando un protocollo di rete (il famigerato (di questi
tempi) SNMP)
In pratica nella risposta che dovevo formattare avevo sempre usato stringhe
ma
vi era anche la possibilita' di passare semplici aree di memoria, impostando
una variabile che indicasse "leggi tutto", e non "leggi fino al terminatore"
quindi mi ero incaponito che si potesse passare 0 anche dentro stringhe
"normali"...
il tuo suggerimento comunque e' stato illuminante... :-)
PS: non volevo che si scatenasse un flame! :-(
--
Giuseppe

 non è 0, ma '0'.
no, io volevo il carattere terminatore dentro la stringa (erronemanete!)!
per la speigazione vedi altra mia risposta (a Mony)
cmq grazie per l'aiuto a tutti!
siete stati gentilissimi e preziosissimi!
--
Giuseppe

 terminatori!!
Difatti e' quello che si intuisce dal tuo messaggio ;)
