Hver er munurinn á stafagerð og C streng?


svara 1:

Fjölbreytta stafi er samliggjandi haf af minni sem er greind sem 8 bita bæti. Stærðin er fast við stofnun og það er tryggt að einn stafur sé vistaður í hverri bæti.

Í þessu tilfelli er stafur hvaða 8 bita tvöfaldur tölustafur frá 00000000 (0x00 álög) til 11111111 (0xFF álög).

bleikju fylking [100]; / * 100 stafir fylki [0] til fylkis [99] * /

AC strengur notar bleikjufylki til geymslu. C strengur getur verið frá 0 að lengd fylkisins mínus 1 staf.

Til að vera vel mótað getur fylkingin aðeins innihaldið hlutmengi af bæti sem tákna gild tákn í stafasettinu sem á að nota. Þetta er oft ASCII eða UTF-8. Ekki er víst að allir aðrir bæti séu gildir þegar strengurinn er prentaður eða túlkaður.

Strengurinn er með merkimiða (breytu), sem er tegund bendilsins (bleikju *) sem inniheldur heimilisfang fylkisins.

Strengurinn er með NULCHAR ('\ 0', 0x00 hex) sem endar strenginn eftir síðasta staf í strengnum.

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

'Straxstrengur' er skrifaður með tvöföldum gæsalöppum í frumkóðanum og veldur því að stafatöflu verður til með þeim stafum sem eru fylltir og geymdir á sérstökum skriflesan stað fyrir strengi og vísir til þeirra er skilað. Þetta er „samantektarsykur“ og einfaldar notkun slíkra strengja. NULCHAR er sjálfkrafa bætt við fylkinguna til að gera það að vel myndaðan streng.

char * s = "strax strengur"; printf ("% s \ n), s);

Allar stöðluðu aðgerðir C bókasafnsstrengsins fara fram strengi sem stafi og gera ráð fyrir að '\ 0' sé til staðar.

„Reiðhestur“ sem er notaður nokkuð almennt er að þegar aðgangur er að fylki þjónar hann einnig sem vísir að fyrsta þætti fylkisins. og öfugt.

char * x = "abcdefgh"; printf ("x 4. staf:% c \ n", x [3]); x 4. staf: d / * setja streng inn í stafatöflu * / char str [100]; strncpy (str, "abcdefghijklmnop \ 0", 18); bleikju * a = str; bleikju * b = str + 7; printf ("% s \ n", a); abcdefghijklmnop printf ("% s \ n", b); hijklmnop

Þrátt fyrir þennan sveigjanleika eru bleikjufylking og C strengur ekki beint samhæfðir.

bleikju s [10]; s = "abcdefghi"; / * villa * / // villa: Ósamrýmanlegar gerðir þegar þeim er úthlutað að tegund 'bleikja [10]' af gerðinni 'bleikju *' "abcdefghi" er strax strengur og er leystur í bendilinn til 'a' í fylkinu sem búið er til fyrir það. Úthlutun s virkar ekki þar sem ekki er hægt að úthluta bleikju fylkjum.

Fylki eru í raun ekki fyrsta flokks tegund í C. Ekki er hægt að afrita þau beint, þau hafa enga aðgerð á stigstigi osfrv. Allt sem er gert með fylki í C er gert fyrir einstaka innihaldið, ekki sem einingu.

bleikju s [10]; bleikju * x = "abcdefghi"; / * '\ 0' er í lok * / strncpy (s, x, 10); / * afritar hvern staf í fylki * /

svara 2:

Persónugerð er gagnaskipan á forritunarmálinu C: fjöldi bæti í minni þar sem þú getur geymt stafi. Þú getur vistað hvaða staf sem er (þ.e. 8 bita bæti, gildi 0 til 255) í hverri af þessum frumum.

Strengur í C-stíl (eins og ég túlka „c-streng“ í spurningunni þinni) er ein leið til að tákna „streng“ af stöfum sem C tungumálið skilgreinir sem fjölda stafa án núll bæti (gildi) 0). Þetta er táknað með persónunum sjálfum, fylgt eftir með núll bæti, svo að lengd strengsins þarf ekki að geyma sérstaklega. Berðu þetta saman við Pascal-stílstrenginn, sem er táknaður með 16 bita heiltölu, síðan þeim fjölda upplýsinga sem eru bæti (svo að Pascal strengurinn er 65535 eða færri).

Persónugerðin er gagnagerð, C-stíll strengurinn er gagnaframsetningin. Þau eru mismunandi dýr.

Persónugerð getur innihaldið C-stílstreng eða eitthvað annað (t.d. það inniheldur gagnlegar upplýsingar á eftir núllstafi eða inniheldur alls engan staf). og samt gætirðu samt getað túlkað það sem C-stíl streng (svo framarlega sem það inniheldur að minnsta kosti einn núll staf). Hægt er að geyma C-stílstreng í stafatöflu eða á öðrum stað en fylki (til dæmis skrifvarinn hluti minni og getur því ekki „geymt“ önnur gildi).