c 的关于数组初始化 和 memset 用法
今天为了彻底搞定一个关于 c 中数组初始化和声明不同情况下,比如只声明一个数组 char str[20]; 那么这 str 里面是什么内容呢?我用 vc6++,debug 下看到都是 - 56 饿 asc 码,后来请教了一个华为的大牛,他说 按照理论来说里面的内容都是有可能的,这和叫做 “脏内存” 或者叫做“野数组”。好了第一个问题搞懂了。
第二个问题 memset 的问题,之前在万臣解析 fast 协议的时候,因为是刚入门 C,薄荷老大给我说一般声明了数组吼都用 memset 一下。当时不是很理解,但是现在这句话知道了。
举例一下:
比如 char str[20];
对于 str 的连续 20 个单元都是随意的值
char str[20] = "Hello World!";
这个时候对于 str,前面的字符是 Hello World 紧接着是'/0';也就是说 str 尽管后面没用到的内存单元也是 0 了,不是随意值
如果 memset(str, 0, sizeof(str));
那么这句话也是把 str 的前 sizeof(str) 个单元都赋值给 0
如果是 memset(str, 1, 10)
那么这句话是把 str 的前 10 个单元都赋值给 1 了,其余的还是 随意值