Hoe krijg ik de tekenreeksgrootte in bytes?

Zoals de titel al aangeeft, is mijn vraag hoe ik de grootte van een string in Ckan krijgen. Is het goed om sizeofte gebruiken als ik het (de string) heb gedeclareerd in een functie zonder mallocerin? Of, als ik het als een pointer heb aangegeven? Wat als ik het heb geïnitialiseerd met malloc? Ik wil graag een uitgebreid antwoord.


Antwoord 1, autoriteit 100%

Je kunt strlengebruiken. De grootte wordt bepaald door het afsluitende null-teken, dus de doorgegeven tekenreeks moet geldig zijn.

Als je de grootte van de geheugenbuffer wilt, die je string bevat, en je hebt er een aanwijzer naar:

  • Als het een dynamische array is (gemaakt met malloc), is het onmogelijk om te krijgen
    de grootte, omdat de compiler niet weet naar welke aanwijzer verwijst.
    (controleer dit)
  • Als het een statische array is, kun je sizeofgebruiken om de grootte te krijgen.

Als je niet zeker weet wat het verschil is tussen dynamische en statische arrays, controleer dan dit.


Antwoord 2, autoriteit 27%

Gebruik strlenom de lengte van een null- beëindigde tekenreeks.

sizeofretourneert de lengte van de array, niet de tekenreeks. Als het een pointer is (char *s), en geen array (char s[]), zal het niet werken, omdat het de grootte van de pointer teruggeeft ( gewoonlijk 4 bytes op 32-bits systemen). Ik denk dat een array wordt doorgegeven of geretourneerd als een aanwijzer, dus je verliest de mogelijkheid om sizeofte gebruiken om de grootte van de array te controleren.

Dus, alleen als de string de volledige array (bijv. char s[] = "stuff") uitspant, met behulp van sizeofVOOR A Statisch gedefinieerd array Retourneer wat u wilt (en wees sneller omdat het niet nodig heeft om de null-terminator te vinden) (als het laatste teken een null-terminator is, moet u een null-terminator zijn aftrekken 1). Als het de volledige array niet overspaart, zal het niet terugkeren wat u wilt.

Een alternatief voor dit alles is eigenlijk de grootte van de string opslaan.


Antwoord 3, Autoriteit 23%

Hoewel sizeofwerkt voor dit specifieke type string:

char str[] = "content";
int charcount = sizeof str - 1; // -1 to exclude terminating '\0'

Het werkt niet als straanwijzer (sizeofIS RETOURNERS GROOTTE VAN DE POSER, MACHTER 4 OF 8) OF ARRACT MET GESPECTEERDE LENGTE (sizeofretourneert de opgegeven lengte van de byte-aantal, die voor Char-type hetzelfde is).

Gebruik gewoon strlen().


Antwoord 4, Autoriteit 8%

Als u sizeof()gebruikt, dan een char *stren char str[]retourneert verschillende antwoorden. char str[]retourneert de lengte van de tekenreeks (inclusief de string-terminator) terwijl char *strde maat van de aanwijzer terugstuurt (verschilt volgens de compiler).


Antwoord 5, Autoriteit 2%

Ik hou van gebruik:

(strlen(string) + 1 ) * sizeof(char)

Hiermee geeft u de buffergrootte in bytes. U kunt dit gebruiken met SNPRINTF () kan helpen:

const char* message = "%s, World!";
char* string = (char*)malloc((strlen(message)+1))*sizeof(char));
snprintf(string, (strlen(message)+1))*sizeof(char), message, "Hello");

Proost! Functie: size_t strlen (const char *s)

Other episodes