Ciao a tutti, spero vogliate aiutarmi a risolvere questo mio ennesimo dubbio. Sto studiando le stringhe come vettori di tipo char. Per testarne il funzionamento ho scritto il seguente programma:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char serie[10];//dichiarazione di un vettore di tipo char
printf("\nlunghezza della stringa: %d", strlen(serie));//visualizzazione della lunghezza della stringa/vettore
int i;
printf("\nindici: ");
for(i = 0; i < 10; i++)
{
printf("%3d", i);
}
printf("\nvalori: ");
for(i = 0; i < 10; i++)
{
printf("%3c", serie[i]);
}
printf("\nASCII : ");
for(i = 0; i < 10; i++)
{
printf("%3d", (int)serie[i]);
}
printf("\ninserisci una stringa: ");
scanf("%s", serie);//posso inserire una stringa di qualsiasi lunghezza fino ad un carattere di spaziatura
//gets(serie);
//stampa orizzontalmente gli indici del vettore stringa e i valori di ciascun elemento del vettore
printf("\ncaratteri nella stringa: ");
//int i;
printf("\nindici: ");
for(i = 0; i < strlen(serie); i++)
{
printf("%3d", i);
}
printf("\nvalori: ");
for(i = 0; i < strlen(serie); i++)
{
printf("%3c", serie[i]);
}
//visualizza la lunghezza della stringa/vettore
printf("\n\nlunghezza della stringa: %d\n", strlen(serie));
system("PAUSE");
return 0;
}
in pratica dichiaro un vettore char con dimensione 10 e ne leggo la lunghezza. Mi aspetto 10, ma l'output è 2. Modificando il valore della dimensione del vettore, cambia il valore restituito da strlen; per esempio se dichiaro un vettore di 100 elementi, viene stampato il numero 4. Non credo di dovermi preoccupare più di tanto, l'array di char non è inizializzato e strlen conta il numero di caratteri escluso il carattere di terminazione, quindi poiché il vettore non è inizializzato, il conteggio dei caratteri può dare un risultato sbagliato, almeno credo. Ciò che invece non mi sono spiegato è perché l'utente può inserire una sequenza di caratteri più lunga rispetto alla dimensione del vettore "serie". Cioè so che scanf("%s", serie) legge una sequenza di caratteri e la memorizza nel vettore "serie" fino alla pressione di un carattere di spaziatura, ma mi aspettavo la restituzione di un errore quando il numero di caratteri inseriti superasse la dimensione del vettore "serie", oppure che il numero di caratteri memorizzati fosse pari alla dimensione del vettore - 1, riservando un elemento dell'array al carattere di terminazione. Nella prova che ho eseguito ho inserito una stringa composta dai 21 caratteri dell'alfabeto italiano. Il programma viene eseguito correttamente, nonostante la dimensione della "serie" fosse di 10 caratteri (vedi immagine "output.jpg" allegata). Se però scrivo "supercalifragilistichespiralitoso" il programma stampa l'output correttamente, ma quando premo Enter per chiudere il programma, mi restituisce un errore (vedi immagine "output 2.jpg" allegata). Cosa non ho capito? Grazie a chiunque voglia dedicarmi un po' del suo tempo.