Come Leggere una Stringa in C
Il linguaggio C non fornisce un tipo di dato stringa effettivo. In C, una stringa è emulata da un array di caratteri che termina con NULL. Un tale array può essere dichiarato staticamente o come puntatore. Il C standard fornisce molte funzioni per manipolare array di caratteri o stringhe C. Questo articolo si concentra sulle funzioni che leggono dal flusso di input e dai file.
Passo 1: Capire le Basi
Una stringa C è un array di tipo char. Come per tutti gli array C, il primo elemento è indicizzato a 0, l'ultimo a "lunghezza stringa meno 1". Solitamente il compilatore inserisce NULL all'ultima posizione, quindi la stringa può contenere "lunghezza meno 1" elementi. NULL equivale a 0x00 in forma intera e '\0' in forma char. Gli elementi sono accessibili con l'operatore []. Il Passo 2 illustra questi concetti.
Passo 2: Direttiva Include
Aggiungi la direttiva include qui sotto a qualsiasi file sorgente prima di usare le funzioni di questo tutorial:
#include <stdio.h>
Passo 3: Dichiarare una Stringa C
Il codice sotto mostra una dichiarazione con il metodo statico e con puntatore:
// dichiarazione statica
char str[50] = {0}; // modo abbreviato per inizializzare tutti gli elementi a 0
// str[49] è NULL
// str ha capacità per 48 caratteri
// dichiarazione per puntatore
char *pStr = NULL; // nessuna allocazione memoria
pStr = (char*)malloc(50); // fatto da "malloc()"
Passo 4: Leggere con scanf()
Leggi dati in una stringa C usando scanf(), che legge una serie di stringhe separate da spazi dall'input standard e le pone negli indirizzi delle variabili di riferimento appropriate, secondo una "stringa di formato":
int n;
printf("Inserisci nome e età: ");
scanf("%s%d", str, &n);
// printf("Il tuo nome è %s e hai %d anni\n", str, n);
Passo 5: Usare gets() (Semplice)
Metti dati in una stringa C usando la più semplice funzione gets(), che legge dati dall'input standard in una stringa soltanto:
printf("Inserisci cognome: ");
gets(str);
printf("Il tuo nome è %s\n", str);
Passo 6: Leggere da File con fscanf()
Leggi dati da file in una stringa C usando fscanf(); questa funzione è analoga a scanf():
FILE* pFile;
pFile = fopen("mioFile.txt", "r"); // assume che il file esista e abbia dati
if (NULL != pFile) {
fscanf(pFile, "%s", str);
printf("La prima parola nel file è %s\n", str);
fclose(pFile);
}
Passo 7: Leggere da File con fgets()
Ripeti il Passo 5 usando fgets(), che funziona come gets():
FILE* pFile;
pFile = fopen("mioFile.txt", "r");
if (NULL != pFile) {
fgets(pFile, str); // Nota: sintassi corretta fgets(str, size, pFile)
printf("La prima parola nel file è %s\n", str);
fclose(pFile);
}
Suggerimento
Per saperne di più sulle funzioni menzionate, visita il sito C Plus Plus (cplusplus.com).
Avvertenza
Non provare a compilare questo codice. È solo per dimostrare le funzioni. Non è un programma coerente e darà errori in compilazione.