获取C中无符号字符数组的长度

如何获取unsigned char*的数组的长度?

这是我的数组:

unsigned char ot[] = { 0x68,0x65,0x6c,0x6f,0x20,0x77,0x72,0x64,0x0,0x0 };

我试图这样使用strlen()int length = strlen((char*) ot);

它返回我直到第一个0x0的长度11,但是我的数组对此有何变化? (检查最后一个元素)

unsigned char ot[] = { 0x68,0xa1 };

然后我仍然得到11个元素,如何获得整个数组的“实际”长度?就像如果在某个0x0元素之后会有数据一样。

例如:

unsigned char* file_buffer = new unsigned char[BUFFER_SIZE];
fread(file_buffer,sizeof(unsigned char),BUFFER_SIZE,input_file)

什么是最好的解决方案?因为fread()的返回值可能会变化,所以如果我正在读取文件的最后一块,那么在某些数据之前如果文件中的0x0会怎样?

exchange456 回答:获取C中无符号字符数组的长度

  

如何获取unsigned char*的数组的长度?

根据您提供的示例,尝试检索array []而不是array *的长度。可以使用关键字sizeofsizeof(ot))来实现。

但是,对于指针(例如您的unsigned char *),您需要事先知道其大小,因为使用sizeof会返回指针本身的分配大小,而不是实际的大小。该指针的内容大小。

,
unsigned char ot[] = {0x68,0x65,0x6c,0x6f,0x20,0x77,0x72,0x64,0x0,0x0};

int _length = strlen((char *) ot);
printf("%d\n",_length); // 11

int length = sizeof(ot) / sizeof(unsigned char);
printf("%d\n",length); // 16

// reason behind strlen behaves like this

if (0x0 == '\0') {
    printf("Yes\n");
}

strlen()找到null terminator的{​​{1}}时返回字符串长度。如果运行代码,它将在末尾显示'\0',表示Yes实际上等效于0x0空终止符。

使用'\0'来获取实际长度。

本文链接:https://www.f2er.com/3132023.html

大家都在问