Gå til innhold

string i C, hvorfor en ekstra rad i tabellen?


Anbefalte innlegg

Hei, jeg lurer på hvorfor en string i C har en mer rad i arrayen enn hva som brukes. Eks:

 

char test[4]="Hei"; <=> char test[4]={'H','e','i','\0'};

 

Siden en array starter på 0, blir det nå en ubrukt rad hvis du se på det slik:

 

|0: (H)|,|1: (e)|,|2: (i)|,|3: (\0)|,|4: ( blank? )|

 

Eller har de gjort noe spesielt med string variabler, så char test[4] ville vært test[3] om det hadde vært en vanlig array?

 

Edit:

 

Påenge mitt er at jeg får feil hvis jeg skriver: char test[3]="Hei"; Men det er jo egentlig det som ville vært riktig, med tanke på at test[4] vil lage 5 rader når kun 4 brukes...

Endret av steffanhalv
Lenke til kommentar
Videoannonse
Annonse

|0:(H)|,|1:(e)|,|2:(i)|,|3:(\0)|,|4:( blank? )|

her er det fem, ikke fire, rader. Du må telle med nr 0

 

Jeg gjorde jo det, 0->H se en gang til... Det er det jeg lurer på, hvorfor vi må ha 5 og ikke 4. For jeg får feil hvis jeg tar å skriver char test[3]="Hei";

Endret av steffanhalv
Lenke til kommentar

Ja, da får du feil, siden i C så blir alle stringer terminert med \0.

Derfor må du bruke 4 og ikke 3.

 

Men siden man i data verden begynner å telle på 0 og ikke 1, så blir siste plass 3 og ikke 4 som du ville fått hvis man begynte å telle på 1.

Men det er fortsatt 4 forskjellig plasser i stringen:

Plass 0: Bokstav1

Plass 1: Bokstav 2

Plass 2: Bokstav 3

Plass 3: \0

Lenke til kommentar

Ja, da får du feil, siden i C så blir alle stringer terminert med \0.

Derfor må du bruke 4 og ikke 3.

 

Men siden man i data verden begynner å telle på 0 og ikke 1, så blir siste plass 3 og ikke 4 som du ville fått hvis man begynte å telle på 1.

Men det er fortsatt 4 forskjellig plasser i stringen:

Plass 0: Bokstav1

Plass 1: Bokstav 2

Plass 2: Bokstav 3

Plass 3: \0

 

Ok, så når du deklarer en variabel så starter den å telle på 1, mens når du bruker den starter den å telle på 0? Har jeg forstått det riktig da?

Lenke til kommentar

Nei,

Når du lager en string/array så sier du hvor mange plasser du ønsker tilgjengelig, ikke noe om hvor den begynner å telle hen, for det er ikke nødvendig i det hele tatt. Hvor mange plasser du ønsker er helt uavhenging av om den begynner å telle på 0,1,10 eller 1003242304923942340239840239402394023 så lenge du får det riktige antallet plasser og vet hvor de begynner hen.

 

Standaren innen mye av IT verden er å begynne å telle på 0 og da har også første plassen i en string/array også fått nummeret 0.

  • Liker 1
Lenke til kommentar
  • 2 uker senere...
  • 5 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...