Lorsque string
est défini comme:
char *string;
sizeof(string)
vous indique la taille du pointeur. 4 octets (Vous êtes sur une machine 32 bits.) Vous n'avez pas encore affecté de mémoire pour contenir du texte. Vous voulez une chaîne de 10 caractères? chaîne = malloc (10); Maintenant les points de chaîne à un tampon de 10 octets, vous pouvez mettre des caractères.
sizeof(*string)
sera de 1. La taille de ce que la chaîne pointe vers, un caractère.
Si vous avez la place
char string[10];
sizeof(string)
serait 10. Il est un tableau 10-char. sizeof(*string)
serait 1 encore.
Il serait utile de rechercher et de comprendre la macro __countof.
Mise à jour: oh, oui, MAINTENANT inclure les en-têtes :) 'chaîne' est une classe dont les instances occupent 4 octets, c'est tout ce que cela signifie. Ces 4 octets pourraient pointer vers quelque chose de beaucoup plus utile, comme une zone de mémoire contenant plus de 4 caractères.
Vous pouvez faire des choses comme:
string s = "12345";
cout << "length of String " << s.length();
Où est "string" vient? Exécuter l'exemple de code via un compilateur produirait une erreur de compilation, car un certain nombre de choses seraient indéfinies. (Je ne peux pas imaginer la taille la plus naïve des implémentations 'chaîne' étant seulement 4.) –
@ dash-tom-bang juste édité pour inclure mes fichiers d'en-tête –
sizeof calcule la taille d'un type de données, ce qui est utile si vous faites une allocation dynamique. Je crois que string.length ou size est ce que tu veux. –