strlen()函数C语言0x00在无符号数组使用中,只读取0x00前面的长度
C语言0x00在无符号数组使用中,不能使用 strlen() 计算数组长度,否则不准确,0x00 会起到停止符的作用。
例如:
uint8_t str[4] = {0x01,0x00,0x02,0x03};
size_t len = strlen(str);
这里按照常理来说 len 应该等于 4,但是实际上 len 等于 1,原因是\0 在内存中是以0x00来存放的,而数字0 是一个常用的字符。在使用 strlen 的时候,只会统计 0x00 前面的位数,而忽略 0x00 本身和后面的位数。
解决方法:
可以使用sizeof(str)/sizeof(str[0])
uint8_t str[4] = {0x01,0x00,0x02,0x03};
size_t len = sizeof(str)/sizeof(str[0]);