我想在函数中找到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);
}
答案 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,这是你在功能上得到的。它并不取决于它指向的内容。所有指针都具有相同的大小,与它们指向的类型无关。