如何在C中查找unsigned char *的长度

时间:2008-11-04 10:22:40

标签: c char

我有一个变量

unsigned char* data = MyFunction();

如何查找数据长度?

7 个答案:

答案 0 :(得分:9)

您必须从MyFunction传回数据的长度。此外,请确保您知道谁分配内存以及谁必须解除分配内存。这有各种各样的模式。我经常看到:

int MyFunction(unsigned char* data, size_t* datalen)

然后你分配数据并传入datalen。结果(int)应该表明你的缓冲区(数据)是否足够长......

答案 1 :(得分:6)

假设它是string

length = strlen( char* );

但它似乎不是......因此没有没有让函数返回长度的方式。

答案 2 :(得分:3)

如果unsigned char *)没有空终止,则无法找到它的大小。

答案 3 :(得分:2)

现在这真的不是那么难。你有一个指向字符串第一个字符的指针。您需要递增此指针,直到到达具有空值的字符。然后你从原始指针中减去最后一个指针,瞧你有字符串长度。

int strlen(unsigned char *string_start)
{
   /* Initialize a unsigned char pointer here  */
   /* A loop that starts at string_start and
    * is increment by one until it's value is zero,
    *e.g. while(*s!=0) or just simply while(*s) */
   /* Return the difference of the incremented pointer and the original pointer */
}

答案 4 :(得分:1)

如前所述,strlen只能在字符串NULL中终止,因此第一个0('\ 0'字符)将标记字符串的结尾。你最好这样做:

unsigned int size;
unsigned char* data = MyFunction(&size);

unsigned char* data;
unsigned int size = MyFunction(data);

答案 5 :(得分:1)

原始问题并未说明返回的数据是以空字符结尾的字符串。如果没有,就无法知道数据有多大。如果它是一个字符串,请使用strlen或编写自己的字符串。不使用strlen的唯一原因是如果这是一个家庭作业问题,所以我不打算为你拼出来。

答案 6 :(得分:-5)

#include <stdio.h>
#include <limits.h>  
int lengthOfU(unsigned char * str)
{
    int i = 0;

    while(*(str++)){
        i++;
        if(i == INT_MAX)
            return -1;
    }

    return i;
}

HTH