如下代码:通过reinterpret_cast转换成了U8*, 但是为什么u8[0].buf输出的是"abcdefgh123456"而不是"abcdefgh"呢?
难道和字符串\0有关吗?但是U8类型是声明的一个struct的,reinterpret_cast强转为U8*后,应该每次读取一个U8结构体单位啊。
typedef struct {
char buf[8];
} U8;
int main(){
char bufaa[16] = "abcdefgh123456";
U8* u8 = reinterpret_cast<U8*>(bufaa);
printf("=====1. %s\n", u8[0].buf); //输出:abcdefgh123456
printf("=====2. %s\n", u8[1].buf); //输出:123456
return 0;
}
printf %s 打印的是以'\0'为结束的字符串。
你的字符串直到 '6' 后面才有一个 '\0',所以一定会打印到 '6' 才结束。
printf 并不知道你的数组被声明为多长了,因为数组在被作为参数传递的时候,已经被转换为了一个指针,失去了长度信息。