unsignedchar* bla =(unsignedchar*)"blabla";int s = strlen((char*)bla);
8
Il pourrait y avoir deux significations. Êtes-vous désireux de savoir comment big le type de pointeur est? Si oui, alors Joce réponse est bonne
size_t size =sizeof(unsignedchar*);
Si vous êtes désireux de savoir comment de nombreux éléments ne le pointeur point, c'est un peu plus complexe. Si c'est un C chaîne de style alors strlen ou une variante est votre meilleure option.
Toutefois, si ce est juste un pointeur vers unsigned char qui n'a aucun rapport avec un C chaîne de style, alors il n'existe aucun moyen fiable d'obtenir ce que vous cherchez. C /C++ ne pas associer un champ de longueur avec un pointeur. Vous aurez besoin de passer la longueur avec le pointeur, ou utiliser une classe comme vecteur qui stocke le pointeur et la longueur.
6
Dans un monde idéal, vous n'avez pas. Vous utilisez char* C-style de chaînes de caractères (qui sont NUL terminée et vous pouvez mesurer la longueur d'), et unsigned char* uniquement pour les octets de données (qui vient avec sa longueur dans un autre paramètre ou que ce soit, et qui que vous avez probablement obtenir dans un conteneur STL ASAP, comme vector<unsigned char> ou basic_string<unsigned char>).
La racine du problème est que vous ne pouvez pas faire portable hypothèses si le stockage des représentations de char et unsigned char sont les mêmes. Ils sont généralement, mais ils peuvent ne pas l'être. Donc, il n'y a aucune chaîne comme la bibliothèque de fonctions qui opèrent sur unsigned char*, uniquement sur des char*, et il n'est en général pas sûr de jeter unsigned char* signed char* et traiter le résultat sous forme de chaîne. Depuis char pourrait être signée, ce qui signifie pas de casting unsigned char* char*.
Toutefois, la valeur 0 est toujours la même valeur de représentation en unsigned char et char. Ainsi, dans un non-monde idéal, si vous avez un style C chaîne à partir de quelque part, mais il est arrivé comme un unsigned char*, vous (a) convertir en char* et de s'en sortir, mais aussi (b) de trouver qui l'a fait pour vous, et demandez-leur s'il vous plaît arrêter.
0
Voulez-vous la longueur de l'aiguille, ce qui serait un int. Si vous voulez que la longueur de la chaîne qui est en train d'être souligné, utiliser strlen:
par exemple
La taille du pointeur: sizeof(unsigned char*)
Taille de la chaîne: strlen(unsigned char*)
Des caractères multioctets va signalés comme ..multi-octets
0
Si vous êtes à l'aide de C++, et ses une chaîne de caractères dans un unsigned char*, vous êtes mieux d'abord mettre dans une std::string avant de la manipuler. De cette façon, vous pouvez faire toutes sortes de choses et de toujours être en mesure d'obtenir la longueur() et/ou les capacités() de chaque fois que vous le souhaitez.
Je suis en supposant que vous êtes en train de faire les choses à dit tableau pour faire ses dimensions non-constante. Si vous êtes juste de répartir, de réglage, et d'oubli, vous pouvez toujours stocker la répartition réelle de la taille de la matrice dans une autre variable ou mieux, faire une struct/classe.
//WARNING: memory issues not addressed here.struct myStringStruct
{unsignedchar*string;int len;
allocate(int size){
len = size;string= malloc(sizeof(unsignedchar)* len);}}
Plus complexe que cela et vous êtes en ré-inventant std::string.
-3
Par unsigned char * je suppose que vous voulez dire la chaîne de caractères située au pointeur. Dans ce cas, il serait:
strlen(your_string_pointer)
Cependant, cela ne trouver le \0 de la position. Il n'y a pas de garantie c'est la taille du bloc de mémoire alloué.
Pour la taille réelle de le pointeur:
Si vous voulez que la longueur de la chaîne:
Il pourrait y avoir deux significations. Êtes-vous désireux de savoir comment big le type de pointeur est? Si oui, alors Joce réponse est bonne
Si vous êtes désireux de savoir comment de nombreux éléments ne le pointeur point, c'est un peu plus complexe. Si c'est un C chaîne de style alors strlen ou une variante est votre meilleure option.
Toutefois, si ce est juste un pointeur vers unsigned char qui n'a aucun rapport avec un C chaîne de style, alors il n'existe aucun moyen fiable d'obtenir ce que vous cherchez. C /C++ ne pas associer un champ de longueur avec un pointeur. Vous aurez besoin de passer la longueur avec le pointeur, ou utiliser une classe comme vecteur qui stocke le pointeur et la longueur.
Dans un monde idéal, vous n'avez pas. Vous utilisez char* C-style de chaînes de caractères (qui sont NUL terminée et vous pouvez mesurer la longueur d'), et unsigned char* uniquement pour les octets de données (qui vient avec sa longueur dans un autre paramètre ou que ce soit, et qui que vous avez probablement obtenir dans un conteneur STL ASAP, comme
vector<unsigned char>
oubasic_string<unsigned char>
).La racine du problème est que vous ne pouvez pas faire portable hypothèses si le stockage des représentations de char et unsigned char sont les mêmes. Ils sont généralement, mais ils peuvent ne pas l'être. Donc, il n'y a aucune chaîne comme la bibliothèque de fonctions qui opèrent sur unsigned char*, uniquement sur des char*, et il n'est en général pas sûr de jeter unsigned char* signed char* et traiter le résultat sous forme de chaîne. Depuis char pourrait être signée, ce qui signifie pas de casting unsigned char* char*.
Toutefois, la valeur 0 est toujours la même valeur de représentation en unsigned char et char. Ainsi, dans un non-monde idéal, si vous avez un style C chaîne à partir de quelque part, mais il est arrivé comme un unsigned char*, vous (a) convertir en char* et de s'en sortir, mais aussi (b) de trouver qui l'a fait pour vous, et demandez-leur s'il vous plaît arrêter.
Voulez-vous la longueur de l'aiguille, ce qui serait un int. Si vous voulez que la longueur de la chaîne qui est en train d'être souligné, utiliser strlen:
par exemple
La taille du pointeur: sizeof(unsigned char*)
Taille de la chaîne: strlen(unsigned char*)
Des caractères multioctets va signalés comme ..multi-octets
Si vous êtes à l'aide de C++, et ses une chaîne de caractères dans un unsigned char*, vous êtes mieux d'abord mettre dans une std::string avant de la manipuler. De cette façon, vous pouvez faire toutes sortes de choses et de toujours être en mesure d'obtenir la longueur() et/ou les capacités() de chaque fois que vous le souhaitez.
Je suis en supposant que vous êtes en train de faire les choses à dit tableau pour faire ses dimensions non-constante. Si vous êtes juste de répartir, de réglage, et d'oubli, vous pouvez toujours stocker la répartition réelle de la taille de la matrice dans une autre variable ou mieux, faire une struct/classe.
Plus complexe que cela et vous êtes en ré-inventant std::string.
Par unsigned char * je suppose que vous voulez dire la chaîne de caractères située au pointeur. Dans ce cas, il serait:
Cependant, cela ne trouver le \0 de la position. Il n'y a pas de garantie c'est la taille du bloc de mémoire alloué.