查看以下初始化结构的方法,您可以看到 malloc 在 main 中没有用于分配大小params,它只是立即指向array。它正确打印了值,但这是有效的做法/如果我在分配之前分配大小有什么区别?
typedef struct _param_t {
char * params;
} param_t;
int main()
{
int i;
param_t r;
unsigned char array[5] = {0x01 , 0x02 ,0x03 ,0x04 ,0xFF};
r.params = (char *) array;
for (i = 0; i < 5; i++) {
printf(" Array %d is %x", i, r.params[i]);
}
return 0;
}
输出:
Array 0 is 1 Array 1 is 2 Array 2 is 3 Array 3 is 4 Array 4 is ffffffff
另一方面,这是用于写入文件的 fwrite 原型:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
它接受一个空指针。主要是,我将数组转换为 a(char *)以填充结构。我知道有符号 T* 和无符号 T* 之间的转换通常是可能的。
我的问题是,以VS作为参数以二进制模式r.params写入文件有什么区别?两者尺寸相同。因此不应该有所作为,然后从文件中读取的内容可以存储在 char 数组或 unsigned char 数组中而不会丢失数据,对吗?sizeof(unsigned char)sizesizeof(char)size