Newsgroup: it.comp.lang.c
Titolo: Sto impazzendo per un problema stupido...

Allora, questo è un programma banalissimo, ma mi sta dando non pochi
problemi.
Ecco il listato:
---
#include <stdio.h>
int main(void)
{
 char vett[5];
 char lett;
 lett='C';
 vett[0]=lett;
 vett[1]='i';
 vett[2]='a';
 vett[3]='o';
 vett[4]='!';
 printf("\nEcco la stringa stampata: '%s'.", vett);
 return(0);
}
---
Ed ecco quello che mi risponde:
Ecco la stringa stampata: 'Ciao!6'.
CIAO!6????? Cosa c'entra quel 6??? Ho provato a cambiare il programma
anche in altri modi, ma dopo la normale stringa mi da sempre caratteri
strani, che comunque non ho messo.
Aiutatemi voi...
Aiutate un novellino disperato che rischia non imparare le stringhe in
C...
Uso DJGPP.
Ciao!
Paolo Perini
lau...@digibank.it
http://www.digibank.it/kaiohshin/
"Non ho bisogno delle riviste! La mia vista divina mi permette
di vedere chi fa la doccia e chi si cambia!" - il dio KaiohShin

KaiohShin (lauc...@SPAMdigibank.it) wrote:
[ snip ]
:  char vett[5];
char vett[6];
:  char lett;
:  lett='C';
[ snip ]
:  vett[4]='!';
vett[5]='\0';
[ snip ]
Il fatto e' che in C le stringhe sono array di caratteri terminati dal
carattere '\0' (null).
Ciao ciao
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

 printf("\nEcco la stringa stampata: '%s'.", vett);
Per convenzione, nel linguaggio C, le "stringhe" sono array di
caratteri _terminati da uno zero binario_.  Qui, non hai messo
lo zero binario in questione -- in effetti, non hai neppure
lasciato lo _spazio_, nell'array vett[], per quello zero; ma
printf, naturalmente, "non lo sa", e da` per scontato che
tu abbia rispettato la convenzione -- quindi, va avanti a
stampare zone della memoria che "casualmente" si trovano
subito dopo la fine dell'array, sinche`, per caso, non le
capita un byte che vale 0 binario, al che si interrompe (puo`
anche succedere, naturalmente, qualche altro tipo di errore,
tipo l'accesso a memoria inesistente, prima che capiti di
incontrare il byte a zero).
Cura facilissima: lascia uno spazio in piu`, quindi dichiara
char vett[6], e non trascurare di piazzare esplicitamente lo
zero terminale, quindi aggiungi vett[5]=0.
Alex

  return(0);


con memset ( nomearray , 0 , 10 )
E' grave se ti dico che non ho capito un'acca? :-P


Un bel di' KaiohShin scrisse:
K>  vett[4]='!';
K>  printf("\nEcco la stringa stampata: '%s'.", vett);
K> 
Oltre a quello che ti hanno gia' detto sul carattere 0, aggiungo che e'
piu' comodo usare le funzioni gia' fatte (visto che esistono!)
includi anche la libreria <string.h>
e, per scrivere ciao in una stringa, fai:
strcpy(vett,"Ciao!");
Ciao! ;^)
-- 
"Piu' e' urgente il motivo per cui si fa una cosa, piu' lento sara'
l'impiegato allo sportello", regola di Flugg
-- 
Emanuele Cesena
d.a.m...@iol.it
    occhio all'antispam NOSPAM!
http://www.geocities.com/SiliconValley/Grid/8879

strcpy(vett,"Ciao!");
Ma sei GENIALE! :-(
Io quando sento 'ste cose mi offendo... come faccio ad imparare se non
inizio dalla gavetta? :-P
'ao!
--


>strcpy(vett,"Ciao!");
K> 
K> Ma sei GENIALE! :-(
K> Io quando sento 'ste cose mi offendo... come faccio ad imparare se non
K> inizio dalla gavetta? :-P
K> 
Non ho capito se ti andava bene o no:
if(si')
  bene!
else
  { ti assicuro che e' molto piu' comodo usare le cose gia' fatte, che non
    star li' sempre a cercare di fare tutto.
    E questo te lo dico io, che anch'io preferivo morire piuttosto di
    usare cose gia' fatte
  }  
-- 
"Colui che sorride quando le cose vanno male ha pensato a qualcuno cui dare
la colpa", legge di Jones


  }  
If(you_capito)
 {bravo!}
else
{ero palesemente sarcastico...
 ti ripeto che al moemnto del post stavo ancora imparando molto sulle
stringhe, quindi volevo partire prima dl basso.}


Un bel di' KaiohShin scrisse:
K>  ti ripeto che al moemnto del post stavo ancora imparando molto sulle
K> stringhe, quindi volevo partire prima dl basso.}
K> 
ahhh... al momento... :-))
-- 
"Nulla e' impossibile per colui che non deve farlo", legge di Weiler
