Lengte van char-array zoeken

Ik heb de volgende code:

int i=0;
char a[7]={0x00,0xdc,0x01,0x04};
int len=0;
len = sizeof(a);
printf("The Length is : %d", len);

Hier wil ik de lengte van de array ain c vinden?
Hoe kan dit worden gedaan?


Antwoord 1, autoriteit 100%

Volgens afspraak zijn C-strings ‘null-terminated’. Dat betekent dat er aan het einde een extra byte staat met de waarde nul (0x00). Elke functie die iets doet met een string (zoals printf) zal een string beschouwen als eindigend wanneer hij null vindt. Dit betekent ook dat als je string niet op null eindigt, hij doorgaat totdat hij een null-teken vindt, wat interessante resultaten kan opleveren!

Aangezien het eerste item in uw array 0x00 is, wordt het beschouwd als lengte nul (geen tekens).

Als je je string hebt gedefinieerd als:

char a[7]={0xdc,0x01,0x04,0x00};

bijv. null-beëindigd

dan kun je strlengebruiken om de lengte van de string te meten die is opgeslagen in de array.

sizeofmeet de grootte van een type. Het is niet wat je wilt. Onthoud ook dat de string in een array korter kan zijn dan de grootte van de array.


Antwoord 2, autoriteit 12%

sizeofretourneert de grootte van het type variabele in bytes. Dus in jouw geval retourneert het de grootte van je char[7]wat 7 * sizeof(char)is. Aangezien sizeof(char) = 1, is het resultaat 7.

Dit uitbreiden naar een ander voorbeeld:

int intArr[5];
printf("sizeof(intArr)=%u", sizeof(intArr));

Zou 5 * sizeof(int)opleveren, dus u krijgt het resultaat “20” (althans op een normaal 32bit-platform. Op anderen sizeof(int)kan verschillen)

Terugkeren naar uw probleem:

Het lijkt erop dat wat je wilt weten is de lengte van de string die is ingesloten
in je array en niet de totale array-formaat.

Per definitie moeten C-strings worden beëindigd met een achterstand ‘\ 0’ (0-byte).
Dus om de juiste lengte van de reeks in uw array te krijgen, hebt u
om eerst de tekenreeks te beëindigen, zodat u kunt zien wanneer het klaar is. Anders zou er nu een manier zijn om te weten.

Alle standaardfuncties bouwen op deze definitie, dus als u het strlenbelt om op te halen
De Str ING LEN GTH, het zal de gegeven array herharden totdat deze de eerste 0-byte vindt, die in uw zaak het allereerste element zou zijn.

Nog een ding dat u mogelijk moet weten dat alleen omdat u de resterende elementen van uw char[7]met een waarde niet vult, bevatten daadwerkelijk willekeurige ongedefinieerde waarden.

Ik hoop dat dat hielp.


Antwoord 3, Autoriteit 9%

Als u verwacht 4als uitvoer, probeer dit dan:

Char A [] = {0x00,0xdc, 0x01,0x04};


Antwoord 4, Autoriteit 3%

U kunt dit proberen:

  char tab[7]={'a','b','t','u','a','y','t'};
   printf("%d\n",sizeof(tab)/sizeof(tab[0]));

Antwoord 5

U kunt len = sizeof(a)/sizeof(*a)voor elke soort array. Maar u hebt het geïnitialiseerd als a[7] = {...}wat betekent dat de lengte 7 is …


Antwoord 6

Als iemand op zoek is naar een snelle oplossing hiervoor, is hier hoe u het doet.

while (array[i] != '\0') i++;

De variabele I houdt de gebruikte lengte van de array vast, niet de gehele geïnitialiseerde array. Ik weet dat het een late post is, maar het kan iemand helpen.

Other episodes