33 votes

Comment obtenir la taille d'une chaîne de caractères en octets ?

Comme le titre l'indique, ma question est de savoir comment obtenir la taille d'une chaîne de caractères en C . Est-il bon d'utiliser sizeof si je l'ai déclaré (la chaîne de caractères) dans une fonction sans malloc dans celui-ci ? Ou, si je l'ai déclaré comme un pointeur ? Et si je l'ai initialisé avec malloc ? J'aimerais avoir une réponse exhaustive.

52voto

nslqqq Points 489

Vous pouvez utiliser strlen . La taille est déterminée par le caractère nul de fin de chaîne, donc la chaîne passée devrait être valide.

Si vous voulez obtenir la taille de la mémoire tampon, qui contient votre chaîne de caractères, et vous avez un pointeur sur celle-ci :

  • S'il s'agit d'un tableau dynamique (créé avec malloc), il est impossible d'obtenir des informations sur l'état du tableau. sa taille, puisque le compilateur ne sait pas ce que le pointeur pointe. ( Vérifiez ceci )
  • S'il s'agit d'un tableau statique, vous pouvez utiliser sizeof pour obtenir sa taille.

Si vous ne comprenez pas bien la différence entre les tableaux dynamiques et statiques, consultez le site este .

16voto

Dukeling Points 31203

Utilice strlen pour obtenir la longueur d'un chaîne de caractères non terminée .

sizeof renvoie la longueur de l'élément tableau pas la corde. Si c'est un pointeur ( char *s ), et non un tableau ( char s[] ), cela ne fonctionnera pas, car il retournera la taille du pointeur (généralement 4 octets sur les systèmes 32 bits). Je crois qu'un tableau sera passé ou retourné comme un pointeur, donc vous perdrez la possibilité d'utiliser la fonction sizeof pour vérifier la taille du tableau.

Así que, seulement si la chaîne de caractères couvre l'ensemble du tableau (par exemple char s[] = "stuff" ), utiliserait-on sizeof pour un défini statiquement retournera ce que vous voulez (et sera plus rapide car il n'aura pas besoin de faire une boucle pour trouver le terminateur nul) (si le dernier caractère est un terminateur nul, vous devrez soustraire 1). S'il ne couvre pas la totalité du tableau, il ne retournera pas ce que vous voulez.

Une alternative à tout cela est de stocker la taille de la chaîne.

11voto

hyde Points 13720

Alors que sizeof fonctionne pour ce type spécifique de chaîne :

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

Il ne fonctionne pas si str est un pointeur ( sizeof renvoie la taille du pointeur, généralement 4 ou 8) ou du tableau avec la longueur spécifiée ( sizeof retournera le nombre d'octets correspondant à la longueur spécifiée, qui sont les mêmes pour le type char).

Il suffit d'utiliser strlen() .

4voto

Aniket Bhanja Points 66

Si vous utilisez sizeof() alors un char *str y char str[] renverront des réponses différentes. char str[] retournera la longueur de la chaîne de caractères (y compris le terminateur de la chaîne) alors que char *str retournera la taille du pointeur (différente selon le compilateur).

1voto

A.Clymer Points 442

J'aime utiliser :

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

Cela vous donnera la taille du tampon en octets. Vous pouvez utiliser ceci avec snprintf() peut aider :

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

A la vôtre ! Fonction : size_t strlen (const char *s)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X