Qual è la differenza tra una matrice di caratteri e una stringa C?


Risposta 1:

Un array di caratteri è un intervallo di memoria contiguo che viene analizzato come byte a 8 bit. Ha dimensioni fisse al momento della creazione e garantisce l'archiviazione di un carattere in ogni byte.

Un carattere in questo caso è qualsiasi cifra binaria a 8 bit da 00000000 (0x00 esadecimale) a 11111111 (0xFF esadecimale).

array di caratteri [100]; / * 100 caratteri array [0] a array [99] * /

Una stringa C utilizza un array di caratteri per l'archiviazione. Una stringa C può avere una lunghezza compresa tra 0 e la lunghezza dell'array meno 1 carattere.

Per essere ben formato, l'array può contenere solo un sottoinsieme di byte che rappresentano simboli validi nel set di caratteri da utilizzare. Spesso si tratta di ASCII o UTF-8. Eventuali altri byte potrebbero non essere validi durante la stampa o l'interpretazione della stringa.

La stringa avrà un'etichetta (variabile) che è un tipo di puntatore carattere (char *) che contiene l'indirizzo dell'array.

La stringa avrà un NULCHAR, ('\ 0', 0x00 hex) che termina la stringa, dopo l'ultimo carattere della stringa.

char s [10]; char * t = & s; strncpy (t, "012345678 \ 0", 10)

Una 'stringa immediata' è scritta tra virgolette doppie nel codice sorgente e provoca la creazione e l'inserimento di un array di caratteri con i caratteri compilati in una posizione di memoria di sola lettura della stringa speciale e viene restituito un puntatore ad esso. Questo è "zucchero di sintassi" del compilatore e semplifica l'utilizzo di tali stringhe. Un NULCHAR viene automaticamente aggiunto all'array per renderlo una stringa ben formata.

char * s = "una stringa immediata"; printf ("% s \ n), s);

Tutte le funzioni di stringa della libreria C standard passano le stringhe come char * s e si basano sulla presenza di '\ 0'.

Un "hack" che viene usato in modo abbastanza universale è che l'etichetta di un array quando si accede funge da puntatore al primo elemento dell'array. e viceversa.

char * x = "abcdefgh"; printf ("x 4 ° carattere:% c \ n", x [3]); x 4th char: d / * inserisce una stringa in un array di caratteri * / char str [100]; strncpy (str, "abcdefghijklmnop \ 0", 18); char * a = str; char * b = str + 7; printf ("% s \ n", a); abcdefghijklmnop printf ("% s \ n", b); hijklmnop

Nonostante questa flessibilità, un array di caratteri e una stringa C non sono direttamente compatibili.

char s [10]; s = "abcdefghi"; / * errore * / // errore: tipi incompatibili durante l'assegnazione al tipo 'char [10]' dal tipo 'char *' "abcdefghi" è una stringa immediata e si risolve in un puntatore a "a" nell'array creato per esso. L'assegnazione di s ad esso non funziona, poiché i array di caratteri non sono assegnabili.

Le matrici non sono in realtà un tipo di prima classe in C. Non possono essere copiate direttamente, non hanno operazioni a livello di matrice, ecc. Tutto ciò che viene fatto con le matrici in C viene fatto sui singoli contenuti, non come un'unità.

char s [10]; char * x = "abcdefghi"; / * '\ 0' è alla fine * / strncpy (s, x, 10); / * copia ogni carattere nell'array * /

Risposta 2:

Una matrice di caratteri è una struttura di dati nel linguaggio di programmazione C: un numero di byte in memoria in cui è possibile memorizzare caratteri. È possibile memorizzare qualsiasi carattere (ovvero byte di 8 bit, valore da 0 a 255) in ciascuna di queste celle.

Una stringa in stile C (come intendo per interpretare "stringa C" nella tua domanda) è un modo per rappresentare una "stringa" di caratteri, definita dal linguaggio C come un numero di caratteri senza byte null (valore 0). Questo è rappresentato dagli stessi caratteri seguiti da un byte nullo, quindi non è necessario memorizzare separatamente la lunghezza della stringa. Contrastalo con la stringa in stile Pascal, dove è rappresentata da un numero intero senza segno a 16 bit seguito da quel numero di byte di informazioni (in modo che la lunghezza della stringa di Pascal sia al massimo 65535).

Quindi l'array di caratteri è una struttura di dati, la stringa in stile C è la rappresentazione dei dati. Sono bestie diverse.

Una matrice di caratteri può contenere una stringa in stile C o può contenere qualcos'altro (ad esempio, contiene informazioni utili dopo il carattere null o non contiene alcun carattere null); e anche così potresti essere in grado di interpretarlo come una stringa in stile C (purché contenga almeno un carattere null). Una stringa in stile C può essere memorizzata in un array di caratteri, oppure può essere memorizzata in qualche luogo e non in un array (ad esempio, una parte di sola lettura della memoria e quindi non può "memorizzare" altri valori).