Il y a beaucoup de renseignements similaires, mais dans mon cas, je ne comprends pas ce qui ne fonctionne pas: ces sorties: p> Comment est-il possible? 4 n'est certainement pas la taille de cette chaîne. J'ai même essayé ce qui suit, avec le même résultat: p> EDIT: OK , c'est la déclaration: p> Je suis sur C ++, mais je dois utiliser des fonctions qui n'acceptent que CHAR *. Plus tard dans le code, j'attribuais de nouvelles chaînes à cette variable, comme: p> Oui, le compilateur me donne des avertissements, mais je ne sais pas comment puis-je utiliser différentes chaînes si je Impossible de les écraser ... p> p> MySize = Taille de taille (Samplestring) / Tailleof (Samplestring [0]); Code> P>
6 Réponses :
in c ++, vous utiliseriez in c, vous utiliseriez 4 code> n'est pas la taille de la chaîne, car
SamPlustring code> n'est pas une chaîne. C'est un
char * code>, dont la taille est (sur votre plate-forme) 4, divisée par 1 (taille de
char code>) est correctement 4. P>
std :: string code> et la longueur
() code> méthode. P>
strlen code> qui prend en tant que paramètre un pointeur de caractère NULL terminé. P>
Existe-t-il une bonne référence (par exemple la page Web) où je peux trouver la taille de Char * sur différentes plates-formes?
Vous demandez à la taille d'un pointeur sur un char. Donc, je suppose que vous utilisez un système 32 bits.
Si vous utilisez c ++, utilisez STD :: String: P>
std::string samplestring("Hello world"); std::cout << samplestring.size() << std::endl;
Mais je suis obligé de faire de l'avant en arrière, alors comment puis-je mettre un char * dans une chaîne de C ++ appropriée, faire mes opérations, puis le renvoyer à un char *??
STD :: String SamPlustring (votre_c_string); Samplestring.c_str ();
La taille d'un élément renvoie la taille de la mémoire allouée à cet objet.
Dans votre exemple, la chaîne est probablement déclarée quelque part comme auquel cas la taille de la mémoire est 4.
La méthode que vous voulez probablement dans votre application est p> qui retourne la taille de la chaîne terminée NULL (sans terminaison) p> p> P>
Il existe deux façons de faire une constante de chaîne et votre technique ne fonctionne que sur la première. Le premier rend un tableau de caractères que vous pouvez obtenir la taille de la compilation, et l'autre crée un pointeur à un tableau de caractères. mysize = strlen(samplestring);
Remarque (pour l'OP): la première décomposerait à un pointeur si elle est passée à une fonction, de sorte que le taille de code> donnerait le résultat que vous n'attendez que dans le même contexte.
Il semble que vous ayez un pointeur, pas un tableau. Les tableaux sont convertis en pointeurs lorsque le programme le requiert, de sorte que vous obtiendriez: bien que, puisque en C ++ (mais évidemment pas c), vous pouvez déduire la taille d'un tableau en tant que paramètre de modèle: p> ou vous pouvez utiliser des classes telles que in c, vous pouvez utiliser Tailleof (char) == 1 code>, la division est redondante ici; Si le pointeur était à un plus grand type, vous obtiendriez un résultat différemment inattendu. p>
std :: vecteur code> et
std :: string code> pour garder une trace de la taille. p>
strallen code> pour trouver la longueur d'une chaîne terminée zéro, mais dans la plupart des cas, vous devez suivre une trace des tailles de la matrice vous-même. p> p>
Tout d'abord, Vous n'avez pas montré comment ou p> ou p> Dans les 2 premiers cas, le type de dans le troisième cas, le type de Si vous souhaitez que la taille de la matrice d'origine soit imprimée à partir de Dans la fonction, le paramètre de fonction doit alors être un pointeur sur le type de matrice d'origine (et le type comprend la taille de la matrice d'origine). P> Tailleof (SamPlestring [0]) code> est identique à celui
Tailleof (* Samplestring) code>, ils renvoient tous les deux la taille du premier élément de Le tableau code> SamPlustring code>. Et, en supposant que
samplestring code> est un tableau de caractères,
Tailleof (char) code> est défini à être 1.
SamPlestring code > est déclaré. Il pourrait s'agir de l'un des éléments suivants: p>
SamPlustring code> est
char * code>, donc
Tailleof (SamPlestring) code> retourne
Taillef (code> Char *) code>, qui, sur votre plate-forme, est 4. p>
SamPlestring code> est
char [10] code > (tableau de 10 caractères), mais si vous appelez une fonction qui prend un
char * code> comme paramètre, le tableau de caractères de caractère Decay em> à un pointeur pointant sur le premier élément de la matrice. Dans ce cas, essayer d'imprimer
taille de code> dans la fonction entraînera toujours la taille d'un pointeur étant imprimé. P>
42
Comment
SamPlestring code> a-t-il déclaré?
Où est la définition de
SamPlustring code>?
Vous avez réussi à laisser sortir l'information la plus importante!
String est un tableau de charme, n'est-ce pas? * p donne le premier élément s'il s'agit d'une matrice. Vous avez besoin d'une classe wrapper pour obtenir une taille plus correctement. Je pense que votre tableau est Qwwe + null
En C ++, Char * n'est pas la même chose que STD: String, pas plus que la chaîne de Java ou les chaînes Python de Java. Si vous voulez comprendre Char *, veuillez commencer par K & R C - Lire littéralement le livre K & R. Sinon, restez avec STD :: String - Cela peut vous garder en sécurité pendant un moment.
Dupliqué possible de C ++: Taillef pour la longueur de la matrice
Résolu mon problème en convertissant à C ++ String: STD :: String cppstring (SamPlustring); stringlength = cppstring.Size ();