Cad é an difríocht idir eagar carachtar agus sreang C?


freagra 1:

Is éard atá i sraith carachtar réise cuimhne tadhlach a ndéantar anailís uirthi mar bhearta 8-giotán. Socraítear an méid ag an gcruthú agus ráthaítear go sábhálfar carachtar amháin i ngach beart.

Sa chás seo, is carachtar aon dhigit dénártha 8 ngiotán ó 00000000 (0x00 heics) go 11111111 (0xFF heics).

eagar char [100]; / * Eagar 100 carachtar [0] le eagar [99] * /

Úsáideann sreang AC eagar char le haghaidh stórála. Is féidir le sreang C a bheith ó 0 go dtí fad an eagair lúide 1 charachtar.

Le bheith dea-fhoirmithe, ní fhéadfaidh a bheith san eagar ach fo-thacar beart a léiríonn siombailí bailí sa tacar carachtar atá le húsáid. Is minic gurb é seo ASCII nó UTF-8. Ní fhéadfaidh gach beart eile a bheith bailí nuair a dhéantar an sreangán a phriontáil nó a léirmhíniú.

Tá lipéad (athróg) ar an tsreang, ar cineál pointeoir carachtar (char *) é ina bhfuil seoladh an eagair.

Tá NULCHAR ('\ 0', 0x00 hex) ag an sreangán a chríochnaíonn an tsreang i ndiaidh an charachtair dheireanaigh sa téad.

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

Scríobhtar 'sreang láithreach' i gcomharthaí athfhriotail dúbailte sa chód foinse agus cruthaíonn sé sraith carachtar a chruthú leis na carachtair líonta agus a stóráil in áit speisialta inléite amháin le haghaidh teaghráin agus tugtar pointeoir ar ais dóibh. Is é seo "siúcra comhréir tiomsaitheora" agus déanann sé úsáid teaghráin den sórt sin a shimpliú. Cuirtear NULCHAR i gceangal go huathoibríoch leis an eagar chun go mbeidh sé ina shreang dea-chruthaithe.

char * s = "sreang láithreach"; printf ("% s \ n), s);

Gabhann gach feidhm chaighdeánach de shreang na leabharlainne C teaghráin mar charachtair agus glacann siad leis go bhfuil '\ 0' i láthair.

Is “hack” a úsáidtear go cothrom uilíoch ná nuair a dhéantar rochtain ar eagar, feidhmíonn sé freisin mar threoir don chéad eilimint den eagar. agus a mhalairt.

char * x = "abcdefgh"; printf ("x 4ú carachtar:% c \ n", x [3]); x 4ú carachtar: d / * cuir sreang isteach i sraith carachtar * / 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

In ainneoin na solúbthachta seo, níl eagar char agus sreang C comhoiriúnach go díreach.

char s [10]; s = "abcdefghi"; / * earráid * / // earráid: Is éard atá i gcineálacha neamh-chomhoiriúnacha nuair a shanntar iad do chineál 'char [10]' den chineál 'char *' "abcdefghi" sreang láithreach agus réitítear é i bpointeoir go 'a' san eagar a cruthaíodh dó. Ní oibríonn sannadh s toisc nach féidir eagair char a shannadh.

Ní cineál den chéad scoth iad C. i ndáiríre. Ní féidir iad a chóipeáil go díreach, níl aon oibríochtaí acu ar leibhéal na sraithe, srl. Déantar gach rud a dhéantar le eagair i C don ábhar aonair, ní mar aonad.

char s [10]; char * x = "abcdefghi"; / * Tá '\ 0' ag an deireadh * / strncpy (s, x, 10); / * cóipeálann gach carachtar i sraith * /

freagra 2:

Is éard atá in eagar carachtar struchtúr sonraí i dteanga ríomhchlárúcháin C: roinnt beart le cuimhne inar féidir leat carachtair a stóráil. Is féidir leat carachtar ar bith (ie bearta 8-giotán, luach 0 go 255) a shábháil i ngach ceann de na cealla seo.

Bealach amháin is ea sreangán de stíl C (mar a léirmhíníonn mé “c-string” i do cheist) chun “sreang” de charachtair a shainmhíníonn an teanga C mar líon carachtair gan an null beart (luach) 0). Léiríonn na carachtair iad féin, agus beart nialasach ina dhiaidh sin, mar sin ní gá fad na sreinge a stóráil ar leithligh. Déan comparáid idir seo agus an tsreang i stíl Pascal, a léirítear le slánuimhir 16-giotán gan síniú agus an líon beart beart sin ina dhiaidh sin (mar sin tá an tsreang Pascal 65535 nó níos lú).

Is struchtúr sonraí an t-eagar carachtar, is é an tsreang C-stíl an léiriú sonraí. Is ainmhithe difriúla iad.

Is féidir le sraith carachtar sreangán C-stíl nó rud éigin eile a bheith in eagar carachtar (e.g. tá faisnéis úsáideach ann i ndiaidh an charachtair null nó níl aon charachtar null ann ar chor ar bith). agus fós b’fhéidir go mbeidh tú fós in ann é a léirmhíniú mar shreang de stíl C (fad is go mbeidh carachtar null amháin ar a laghad ann). Is féidir sreangán de stíl C a stóráil in eagar carachtar nó in áit seachas eagar (mar shampla, cuid den chuimhne inléite amháin agus mar sin ní féidir luachanna eile a “stóráil”).