PDA

Visualizza la versione completa : Chiarimenti sui vettori di caratteri


f@nt@m@n
28-09-2006, 14:44
Ciao ciao,
avrei bisogno di qualche delucidazione come sopra. In un esempio del mio testo si immagazzina con scanf una stringa Hello there in un vettore di caratteri e la si stampa con printf, ottenendo come risultato solo Hello .
E' possibile stampare la stringa completa?
Se la stringa è più corta della dimensione del vettore, gli elementi rimanenti conterranno degli spazi segiuti dal carattere nullo di terminazione?? :confused:

oregon
28-09-2006, 14:48
1) Mostra il codice

2) No ... non vengono aggiunti spazi automaticamente

f@nt@m@n
28-09-2006, 14:57
(1)


#include <stdio.h>

int main()
{
char string1[ 20 ];
char string2[] = "string literal";
int i;

printf("Enter a string: ");
scanf( "%s", string1 );

printf( "string1 is: %s\nstring2 is: %s\n"
"string1 with spaces between characters is:\n",
string1, string2 );

for ( i = 0; string1[ i ] != '\0'; i++ ) {
printf( "%c ", string1[ i ] );
}

printf( "\n" );

return 0;

}

(2)Ma allora, se per esempio abbiamo un array[20] e con printf inseriamo solo Hello, gli altri 14 elementi è come se non esistessero

f@nt@m@n
28-09-2006, 15:38
http://img169.imageshack.us/img169/8962/immaginemh3.jpg
Per essere chiari. Quindi nell'esempio there sarà ignorato, giusto?

andbin
28-09-2006, 16:11
Originariamente inviato da f@nt@m@n
Per essere chiari. Quindi nell'esempio there sarà ignorato, giusto? Sì, ma la cosa è dovuta esclusivamente alla scanf e a come gestisce l'input in base agli specificatori di formato.

Se leggi della documentazione sulla scanf, troverai ad esempio che per lo specificatore %s dice:

Matches a sequence of non-white-space characters; the next pointer must be a pointer to char, and the array must be large enough to accept all the sequence and the terminating NUL character. The input string stops at white space or at the maximum field width, whichever occurs first.

Quindi lo spazio è un delimitatore.

f@nt@m@n
28-09-2006, 16:20
ok. Questo mi è chiaro. E se l'input è minore della grandezza del vettore, gli elementi rimanenti è come se non esistessero, giusto?

andbin
28-09-2006, 16:24
Originariamente inviato da f@nt@m@n
ok. Questo mi è chiaro. E se l'input è minore della grandezza del vettore, gli elementi rimanenti è come se non esistessero, giusto? Quello che c'è in tutti i restanti elementi del vettore, non lo so, probabilmente schifezze.
Se il tuo input è "Hello there", l'unica cosa sicura è che la scanf "deposita" nel buffer 6 caratteri

H e l l o \0

(quindi compreso il nullo finale)

f@nt@m@n
28-09-2006, 16:28
Tutto chiaro :unz: . Ti ringrazio :ciauz:

Loading