steffanhalv Skrevet 4. desember 2010 Del Skrevet 4. desember 2010 (endret) 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 4. desember 2010 av steffanhalv Lenke til kommentar
Ayb Skrevet 4. desember 2010 Del Skrevet 4. desember 2010 |0:(H)|,|1:(e)|,|2:(i)|,|3\0)|,|4 blank? )| her er det fem, ikke fire, rader. Du må telle med nr 0 Lenke til kommentar
steffanhalv Skrevet 4. desember 2010 Forfatter Del Skrevet 4. desember 2010 (endret) |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 4. desember 2010 av steffanhalv Lenke til kommentar
Ayb Skrevet 4. desember 2010 Del Skrevet 4. desember 2010 (endret) Ja, men. tell tallene dine da. 0 + 1 + 2 + 3 + 4 = 5 forskjellige tal. test[3] har ikke 4 "rader", men 3. 0, 1 og 2. om du skriver noe inn der havner enter i 3, som ikke finnes Endret 4. desember 2010 av Ayb Lenke til kommentar
steffanhalv Skrevet 4. desember 2010 Forfatter Del Skrevet 4. desember 2010 Ja, men. tell tallene dine da. 0 + 1 + 2 + 3 + 4 = 5 forskjellige tall Ja, men jeg får feil hvis jeg tar å skriver char test[3]="Hei"; , det er dette jeg lurer på... Lenke til kommentar
Lufen Skrevet 4. desember 2010 Del Skrevet 4. desember 2010 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
steffanhalv Skrevet 4. desember 2010 Forfatter Del Skrevet 4. desember 2010 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
Ayb Skrevet 4. desember 2010 Del Skrevet 4. desember 2010 (endret) nvm Endret 4. desember 2010 av Ayb Lenke til kommentar
Lufen Skrevet 4. desember 2010 Del Skrevet 4. desember 2010 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. 1 Lenke til kommentar
steffanhalv Skrevet 4. desember 2010 Forfatter Del Skrevet 4. desember 2010 Takk for hjelpen, vet jeg er litt dust på dette her. Men blir litt forvirret. Burde kanskje forklart hva jeg mente litt tydligere. Lenke til kommentar
_Ferrari_ Skrevet 17. desember 2010 Del Skrevet 17. desember 2010 (endret) Det letteste når du skal deklarere en string (char-array) på den måten er bare slik: char txt[] = "Skriv så mange tegn du bare gidder..."; Endret 18. januar 2011 av _Ferrari_ Lenke til kommentar
TheMaister Skrevet 19. desember 2010 Del Skrevet 19. desember 2010 Ferrari: Er du tilfeldigvis Java/C#-koder? char txt[] = "Skriv så mange tegn du bare gidder..."; er korrekt C. Lenke til kommentar
_Ferrari_ Skrevet 18. januar 2011 Del Skrevet 18. januar 2011 Ferrari: Er du tilfeldigvis Java/C#-koder? char txt[] = "Skriv så mange tegn du bare gidder..."; er korrekt C. Oi, selvfølgelig skal det være slik du skrev. Gikk nok litt fort i svingene der gitt! Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå