Wat ass den Ënnerscheed tëscht engem Charakterarray an engem C-String?


beäntweren 1:

Eng Array vu Personnagen ass en ugrenzend span vun der Erënnerung déi als 8-Bit Bytes analyséiert gëtt. D'Gréisst ass beim Kreatioun fixéiert an et ass garantéiert datt ee Charakter an all Byt gerett gëtt.

An dësem Fall ass e Charakter all 8-Bit binär Ziffer vun 00000000 (0x00 Hex) bis 11111111 (0xFF Hex).

char Array [100]; / * 100 Zeechen Array [0] fir Array [99] * /

AC String benotzt e Char array fir d'Lagerung. A C String kann vun 0 op d'Längt vun der Array minus 1 Zeechen sinn.

Fir gutt geformt ze sinn, kann d'Array nëmmen e Ënnergrupp vu Bytes enthalen, déi gëlteg Symboler am Zeecheset representéiere fir ze benotzen. Dëst ass dacks ASCII oder UTF-8. All aner Bytte sinn vläicht net gëlteg wann de String gedréckt oder interpretéiert gëtt.

De String huet e Label (Variabel), dat ass e Charakterzeechertyp (char *) deen d'Adress vun der Array enthält.

De String huet eng NULCHAR ('\ 0', 0x00 Hex) déi de String no dem leschte Charakter an der Sait mécht.

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

En 'direkten String' gëtt an duebel Zitatmarken am Quellcode geschriwwen a veruersaacht eng Zeechesaz mat de gefëllte Charaktere ze kreéieren an an enger spezieller gelieser Plaz fir d'Strings gespäichert ze ginn an e Zeecher un hinnen zréckzekommen. Dëst ass "Compiler Syntax Zocker" a vereinfacht d'Benotzung vu sou Saiten. E NULCHAR gëtt automatesch an d'Array gesat fir et e gutt geformte String ze maachen.

char * s = "eng direkt Sait"; printf ("% s \ n), s);

All Standardfunktioune vun der C Bibliothéik schloen String als Zeechen an huelen un datt '\ 0' präsent ass.

E "Hack" deen zimmlech universell benotzt gëtt ass datt wann eng Array zougänglech ass, et déngt och als Zeechner op dat éischt Element vun der Array. a vice versa.

char * x = "abcdefgh"; printf ("x 4. Charakter:% c \ n", x [3]); x 4e Charakter: d / * e String an e Charakterarray aginn * / 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

Trotz dëser Flexibilitéit sinn eng Char-Array an e C-String net direkt kompatibel.

char s [10]; s = "abcdefghi"; / * Feeler * / // Feeler: Onkompatibel Zorten wann se dem Typ 'char [10]' vum Typ 'char *' "abcdefghi" zouginn, ass eng direkt Sait an ass an engem Eegele fir 'a' an der Array geléist ginn geléist. Assignéiere s funktionnéiert net well Charrarays kënnen net zougewisen ginn.

Arrays sinn net wierklech en éischtklasseschen Typ an C. Si kënnen net direkt kopéiert ginn, si hu keng Array-Niveau Operatiounen, asw. Alles wat mat Arrays am C gemaach gëtt, gëtt fir den individuellen Inhalt gemaach, net als Eenheet.

char s [10]; char * x = "abcdefghi"; / * '\ 0' ass um Enn * / strncpy (s, x, 10); / * kopéiert all Charakter an eng Array * /

beäntweren 2:

Eng Charakterarray ass eng Datestruktur an der C-Programméierungssprooch: eng Zuel vun Bytes an der Erënnerung, an där Dir Zeeche kënnt opspäicheren. Dir kënnt all Charakter (dh 8-Bit Bytes, Wäert 0 bis 255) an all eenzel vun dësen Zellen späicheren.

En C-Style String (sou wéi ech "c-String" an Ärer Fro interpretéieren) ass ee Wee fir e "String" vun Zeechen ze representéieren déi d'C-Sprooch als Zuel vun Zeechen definéiert ouni den null Byte (Wäert) 0). Dëst gëtt vun de Personnagen selwer vertrueden, gefollegt vun engem Nullbyte, sou datt d'Längt vun der Sait net separat gelagert muss ginn. Vergläicht dëst mat dem Pascal-Stil-String, dee vertruede gëtt vun engem 16-bit onsignéierte ganzen Zuel, gefollegt vun där Unzuel vun Bytes vun Informatioun (sou datt de Pascal String 65535 oder manner ass).

De Charakterarray ass eng Datestruktur, de C-Style Sait ass d'Datenrepresentatioun. Si sinn verschidden Déieren.

E Charakterarray kann e C-Style String oder eppes anescht enthalen (z. B. enthält nëtzlech Informatioun nom Null Charakter oder enthält guer keng Nullkarakter). an awer kënnt Dir et ëmmer nach als C-Style String interpretéiere kënnen (soulaang et op d'mannst ee null Charakter enthält). En C-Stil Sait kann an engem Zeechesaz oder op enger anerer Plaz wéi eng Array gelagert ginn (zum Beispill e read-read Portioun Erënnerung an dofir net aner Wäerter "späicheren").