如何在C中找到unsigned char指针的长度?

时间:2014-04-03 06:45:47

标签: c arrays sizeof strlen

我想在函数中找到unsigned char指针的大小或长度,其中该指针是该函数的参数。接近指针声明大小正确。

但是当我试图在功能中找到大小时,它会给出4。

我该怎么做?

#include <stdio.h>
//void writeFile(unsigned char *da);
void writeFile(char *da);
int main(int arc,char **argv)
{

 unsigned char block_bmp[]=
{
   0x0,0xff,0xff,0xff,0x0,0x0,0x0,0xff,0xff,0xff,0x0,0x0,0x0,0xff,0xff,0xff,//*16bytes*
};
printf("size::%d\n",sizeof(block_bmp));
writeFile(block_bmp);
}

//void writeFile(unsigned char *da)
void writeFile(char *da)
{
printf("%d\n",__LINE__);
printf("size::%d\n",sizeof(da));
printf("length::%d\n",strlen(da));
FILE *fp;
int i;
fp=fopen("/tmp/hexfile","wb");
for(i=0;i<3780;i++)
    fprintf(fp,"%c",da[i]); 
//  fwrite(da,sizeof(unsigned char),sizeof(da),fp);
fclose(fp);
}

4 个答案:

答案 0 :(得分:4)

如果它指向以NULL结尾的字符串,请使用strlen。如果没有,指针只是被调用函数的一些内存地址,没有关于数组大小的任何附加信息(我假设你试图传递一个数组)。我建议将数组元素的数量作为附加参数传递给函数。

答案 1 :(得分:3)

在这种情况下,您无法使用sizeof。如果char数组以NULL结尾,则应使用strlen

当您将数组传递给函数时,它会衰减到指针,您无法在此指针上使用sizeof来获取数组的大小。 sizeof将为您提供4个字节(假设32位机器)。

示例:

#include <stdio.h>
void fun(int myArray[10])
{
    int i = sizeof(myArray);
    printf("Size of myArray = %d\n", i);
}
int main(void)
{
    // Initialize all elements of myArray to 0
    int myArray[10] = {0}; 
    fun(myArray);
    getch();
    return 0;
}
/**************OUTPUT**************
Size of myArray = 4
***********************************/

答案 2 :(得分:1)

unsigned char array[100];
// sizeof(array) == 100

unsigned char* ptr = array;
// sizeof(ptr) == 4 for 32 bit platform.

调用

等功能时
 foo(unsigned char* ptr)
 {
 }

使用&#39;数组&#39;作为参数,您只能看到一个&#39; unsigned char *&#39;,而不是一个包含100个元素的数组。这就是为什么&#39; sizeof&#39;返回4.

答案 3 :(得分:0)

指针大小sizeof(any_pointer_variable)将不依赖于它将指向的数据类型。指针的大小大多是4,这是你在功能上得到的。它并不取决于它指向的内容。所有指针都具有相同的大小,与它们指向的类型无关。