Newsgroup: it.comp.lang.c
Titolo: x TOMMY e LAFORGIA...

>
questo era ciò che avevo scritto, ho aprezzato la vostra cortesia nel
rispondermi però non penso di essermi spiegata, oppure non ho compreso le
vostre risposte
io ho un array di char di 64
s[64]
tramite  una recv ricevo una stringa, che è il nome di un programma, la recv
si ferma quando riceve \n
in seguito devo aprire un nuovo programma passando come parametro il nome
ricevuto con la recv privo di \n (e di tutti i caratteri successivi
ovviamente), se io sostituisco \0 allo \n come avete consigliato il
puntatore che passo come parametro soddisfa la richiesta?? il dubbio mi
sorge perchè se passo per esempio "s", questo includerà tutti i 64 char non
solo fino a \0, oppure sbaglio, aspetto...
illy
--
<< m @ c y >>
aErOsMiTh   FoReVeR

 puntatore che passo come parametro soddisfa la richiesta?? 
E` un terreno  molto pericoloso... nel buffer potrebbe  anche non essere
inserito il  '\n' (non  e` garantito  che i dati  arrivino tutti  in una
volta sola). Dovresti fare una cosa del genere:
int r;
char s[64];
char *p;
r = recv(socket, s, 63, 0);
if (r <= 0) {
        /* errore */
}
/* Aggiungo il terminatore in coda ai dati ricevuti */
s[r] = '\0';
p = strchr(s, '\n');
if (p == NULL) {
        /* '\n' non trovato, la stringa ricevuta e` incompleta */
} else
        *p = '\0';
Btw, laboratorio di info2?
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Non ho ancora capito se il mio cane e` maschio o femmina:
quando fa la pipi` si chiude in bagno

 solo fino a \0, oppure sbaglio, aspetto...
Non ho per nulla dimestichezza con i soket, ma una idea potrebbe essere questa,
se possibile s[64] lo definisco come s[65],  dopdichè mi costruisco un buffer
(s) che contenga la lunghezza dei byte da leggere e la stringa che mi interessa,
ad esempio se voglio spedire la stringa "Dave", ne calcolo la lunghezza e la
inserisco nella prima posizione di s e nelle restanti il testo che mi interessa,
per quato riguarda il recupero della stringa mi comporto di conseguenza leggendo
solo il testo che mi interessa...
Magari ho scritto una stronzata , ma potrebbe anche funzionare ;-)... Salutoni a
tutti Dave.

 solo fino a \0, oppure sbaglio, aspetto...
umh, s decade nell'indirizzo del primo elemento. In pratica quando passi s
e' come se tu dicessi &s[0].
Tu NON dici affatto quando finisce l'array (quasi...).
In pratica quello che dici:
"se passo per esempio "s", questo includerà tutti i 64 char non solo fino a
\0, oppure sbaglio, aspetto..."
e' sbagliato, tu dici solo dove INIZIA s, non dove finisce. Se ad esempio
passi s a printf lui smettera' di leggere s dopo aver raggiunto un \0. Se lo
passi ad una TUA funzione potresti andare avanti a leggerlo fino a che non
incontri una 'a', ad esempio. Questo dipende da te, ma ricordati che gli
array NON sono passati per valore, ma per indirizzo!!!
Quando hai funzione(char *s) oppure funzione(char s[64]) etc.. tale funzione
NON riceve una copia dell'array, riceve solo "l'indirizzo".
Se riesci a non andare OT, prova a darmi piu' dettagli e magari posso
aiutarti.
Nel primo messaggio pensavo di aver capito il problema ed ho risposto. Ora
invece di aver capito meglio ho solo una gran confusione in testa... Cerca
di darci abbastanza informazioni....
Tommy

puntatore che passo come parametro soddisfa la richiesta?? 
[...]
Non capisco che intendi, non capisco dove sia il problema.  
Io suppongo che '\n', come hai detto, venga memorizzato nella stringa.
Se sostituisci '\n' con '\0' stai praticamente informando il sistema
che la stringa termina in quel punto.  Per cui:
"pippo\n" diventa "pippo"
"arcivescovo\n" diventa "arcivescovo"
e cosě via...
-- 
Andrea Laforgia
www.geocities.com/andrealaforgia
"640kb of memory should be enough for anyone." -- Bill Gates.

per tommy ecco altre info, più di così non so che fare, al più lunedì vieni
a milano che ti porto con me al labo di info
come qualcuno ha intuito sono incasinata con il labo di info2. il server mi
manda una stringa che io ricevo con un ciclo for fino a che il byte ricevuto
non è \n (se qualcuno pensa che sia stupido sappiate che per me è la cosa
più ovvia e semplice) in seguito con una execl (se non ricordo male) devo
lanciare un nuovo programma e il primo parametro che gli devo passare (oltre
al path del nuovo programma) è la stringa ricevuta,
cmq laforgia come sempre è stato chiaro e quindi
se io sostituisco \n con \0 la stringa di 64 char è come se
contenesse solo quelli che a me interessano, (se come avete scritto la
funzione accetta le stringhe che terminano con \0)


 funzione accetta le stringhe che terminano con \0)
diciamo che la execl legge solo fino al \0, poi si ferma. Si.
Tommy

 a milano che ti porto con me al labo di info
Poli? Ci sono passato anch'io l'anno scorso ;)
Quello su cui sei bloccata  dovrebbe essere l'esercizio 5, giusto? (devi
avviare un certo numero di altri programmi che ricontattano il server)
Avevo scritto  i programmi di test  (ie. come quelli che  girano in lab)
per tutti gli esercizi, tranne il  5. Se ti interessano posso cercarli e
mandarteli.
K
-- 
Home: 
http://kronoz.cjb.net
"Su cio` di cui non si puo` parlare e` bene tacere".
 Ludwig Wittgenstein

 wrote in message
b7a4is$o3d$1...@dreamland.darkstar.lan...


 un'idea, ma tu a cosa sei iscritto??
Ing. Informatica. Contattami via mail, qui` siamo OT.
Kronos
-- 
Home: 
http://kronoz.cjb.net
Porc i' mond che cio' sott i piedi!
V. Catozzo