Comme le titre l'indique, ma question est de savoir comment obtenir la taille d'une chaîne dans C
. Est-il bon d'utiliser sizeof
si je l'ai déclarée (la chaîne) dans une fonction sans malloc
? Ou, si je l'ai déclaré comme un pointeur? Et si je l'initialisais avec malloc
? J'aimerais avoir une réponse exhaustive.
Vous pouvez utiliser strlen . La taille étant déterminée par le caractère nul final, la chaîne transmise doit être valide.
Si vous voulez obtenir la taille de la mémoire tampon, celle-ci contient votre chaîne et vous avez un pointeur sur celle-ci:
sizeof
pour obtenir sa taille.Si vous ne comprenez pas la différence entre les tableaux dynamiques et statiques, vérifiez this .
Utilisez strlen
pour obtenir la longueur d'une chaîne terminée par un caractère null .
sizeof
renvoie la longueur du tableau et non de la chaîne. Si c'est un pointeur (char *s
), pas un tableau (char s[]
), cela ne fonctionnera pas, car il renverra la taille du pointeur (généralement 4 octets sur les systèmes 32 bits). Je crois qu'un tableau sera passé ou retourné sous forme de pointeur, vous perdriez ainsi la possibilité d'utiliser sizeof
pour vérifier la taille du tableau.
Ainsi, uniquement si la chaîne s'étend sur tout le tableau (par exemple, char s[] = "stuff"
), utiliser sizeof
pour un tableau défini de manière statique renvoie ce que vous voulez (et sera plus rapide car il ne serait pas nécessaire boucle pour trouver le terminateur nul) (si le dernier caractère est un terminateur nul, vous devrez soustraire 1). Si cela ne couvre pas tout le tableau, il ne retournera pas ce que vous voulez.
Une alternative à tout cela consiste à stocker la taille de la chaîne.
Bien que sizeof
fonctionne pour ce type de chaîne spécifique:
char str[] = "content";
int charcount = sizeof str - 1; // -1 to exclude terminating '\0'
Cela ne fonctionne pas si str
est un pointeur (sizeof
renvoie la taille du pointeur, généralement 4 ou 8) ou un tableau de longueur spécifiée (sizeof
renvoie le nombre d'octets correspondant à la longueur spécifiée. , qui pour le type de caractère sont identiques).
Il suffit d'utiliser strlen()
.
Si vous utilisez sizeof()
, alors un char *str
et char str[]
retournera des réponses différentes. char str[]
retournera la longueur de la chaîne (y compris le terminateur) tandis que char *str
retournera la taille du pointeur (diffère selon le compilateur).
J'aime utiliser:
(strlen(string) + 1 ) * sizeof(char)
Cela vous donnera la taille de la mémoire 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");
À votre santé! Fonction: size_t strlen (const char *s)