joc*_*oce 30
对于指针的实际大小:
size_t s = sizeof(unsigned char*);
Run Code Online (Sandbox Code Playgroud)
如果你想要字符串的长度:
unsigned char* bla = (unsigned char*)"blabla";
int s = strlen((char*)bla);
Run Code Online (Sandbox Code Playgroud)
这可能有两个含义.你只是想知道指针类型有多大吗?如果是这样,那么Joce的回答是正确的
size_t size = sizeof(unsigned char*);
Run Code Online (Sandbox Code Playgroud)
如果你想知道指针指向多少元素,那就更复杂了.如果这是一个C风格的字符串,那么strlen或某些变体是您的最佳选择.
但是,如果这只是指向与C样式字符串无关的unsigned char的指针,那么就无法可靠地实现您正在寻找的内容.C/C++不会将长度字段与指针相关联.您需要使用指针传递长度或使用类似向量的类来存储指针和长度.
在一个理想的世界里,你没有.你可以将char*用于C风格的字符串(它们是NUL终止的,你可以测量它的长度),而unsigned char*只用于字节数据(它的长度在另一个参数或其他任何参数中,你可能会进入尽快使用STL容器,例如vector<unsigned char>or basic_string<unsigned char>).
根本问题是您无法对char和unsigned char的存储表示是否相同做出可移植的假设.他们通常是,但他们被允许不是.因此,没有类似字符串的库函数在unsigned char*上运行,仅在char*上运行,并且将unsigned char*转换为signed char*通常并不安全,并将结果视为字符串.由于char可能已签名,这意味着不会将unsigned char*转换为char*.
但是,0在unsigned char和char中始终是相同的值表示.因此,在一个非理想的世界中,如果你从某个地方获得了一个C风格的字符串,但它已经作为一个无符号字符*来到,那么你(a)将它转换为char*并继续使用它,而且(b) )找出谁对你这么做,并请他们停下来.