初始化方法1
char szFileName[MAXN] = {0}
/**其结果相当于memset(szFileName,0,sizoef(szFileName));
*即对字符串数组中的每个数据都初始化为(ASCII)0 即 "\0"
**/
初始化方法2
char szFileName[MAXN] = "\0" //即在刚开始的位置中加了一个结束符
在C/C++中结构体中使用空数组在一定使用环境下很有好处。
例如:
typedef struct _NET_DATA3
{
INT32 iLength;
BYTE byType;
BYTE byReserved;
WORD wStreamId;
DWORD dwChannelId;
DWORD dwParam;
DWORD dwParam1;
BYTE pData[]; //空数组, 必须放在结构体最后面,否则编译错误。
} NET_DATA3;
unsigned char buf[256];
NET_DATA3 *pNetData = (NET_DATA3)buf;
此时空数组pData就表示buf中sizeof(NET_DATA3)位置后一个的地址,也就是有一块有效的内存了。
发现sizeof(NET_DATA3) 等于20, 也就是说pData空数组在结构体中不占空间。
注意:在设计结构体或类时,空数组后面不允许有其他成员变量。
如: Class AA
{
NET_DATA3 m_pdata[];
int m_ref; //此时因为NET_DATA3三中有空数组,而产生编译错误。
//空数组后面是不确定的长度,所以不能够在有其他成员变量。
}
C++中定义一个数组,没有绝对空的概念。
因为,定义数组后,系统就会给数组分配内存空间,该空间可能以前被其它程序使用过,其中留有原来写入的数据(对于本程序来说,就是垃圾数据),也可能没有被使用过,其内存数据值为0.
如果想在定义数组后,将数组内容清为0,则可以采用以下三种方法:
C++中定义一个数组,没有绝对空的概念。
因为,定义数组后,系统就会给数组分配内存空间,该空间可能以前被其它程序使用过,其中留有原来写入的数据(对于本程序来说,就是垃圾数据),也可能没有被使用过,其内存数据值为0.
如果想在定义数组后,将数组内容清为0,则可以采用以下三种方法:
1.初始化为0。int arr[10]={0}; //该语句置第一个元素为0,其余元素系统自动清为0。
2.手工逐个元素置0。
int arr[10]; //只定义,未初始化。3.采用memset()函数置数组元素为。
#include初始化方法1
char szFileName[MAXN] = {0}
/**其结果相当于memset(szFileName,0,sizoef(szFileName));
*即对字符串数组中的每个数据都初始化为(ASCII)0 即 "\0"
**/
初始化方法2
char szFileName[MAXN] = "\0" //即在刚开始的位置中加了一个结束符