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.
Réponses
Trop de publicités?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 .
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.
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()
.
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)