PDA

Visualizza la versione completa : [C] Riempimento di un array con caratteri e presenza di valori indesiderati


C0d3
14-07-2007, 19:29
Salve a tutti, è da poco che studio C e avrei una domanda da porvi, prendiamo questo semplice codice:


#include <stdio.h>

main()
{

char str[1024], keys[1024];
int i, c, j;
for(i = j = 0; (c = getchar()) != '\n' && i < 1024; i++ )
{
if( c == '!' )
{ keys[j] = c; j++; }
}


printf("%s\n", keys);
system("PAUSE");
return 0;
}


Qualcuno sa dirmi perchè nell'array keys, invece di starci solo i punti interrogativi, compaiono anche altri caratteri strani che non ho battuto a tastiera?

shodan
14-07-2007, 20:01
Perché non hai messo il terminatore NULL alla fine del ciclo.

Samuele_70
14-07-2007, 20:35
Originariamente inviato da C0d3
...
Qualcuno sa dirmi perchè nell'array keys, invece di starci solo i punti interrogativi, compaiono anche altri caratteri strani che non ho battuto a tastiera?
Hem ... Quali punti interrogativi ?

gianpa
14-07-2007, 21:43
infatti...

Ogni stringa in c termina col carattere '\0'

Quando printf stampa la tua stringa stampa tutti gli elementi dell'array finché non raggiunge il carattere '\0' che nella tua stringa non c'è.

Quando inizializzi una stringa facendo per esempio:

char stringa[]="ciao";

crei un vettore di QUATTRO caratteri dei quali l'ultimo è '\0'. In pratica equivale a scrivere:


char stringa[]={ 'c' , 'i' , 'a' , 'o' , '\0' };

Nella tua stringa manca appunto il carattere '\0' finale che permette a printf di riconoscere la fine della stringa all'interno dell'array. Spero di essere stato chiaro ;)

C0d3
16-07-2007, 17:39
Vi ringrazio per le risposte(si gianpa, sei stato chiaro ;) ), erroneamente pensavo che il null venisse aggiunto automaticamente nella stringa, come avviene nel caso di un' inizializzazione.

Loading