sendmessage传递数组

 

1.在初始化数组尤其是需要每次都初始化的时候,很多同学使用循环来进行,这样不但速度慢,而且写起来也很长。所以现在提供一个函数来实现这个功能。。。

原型:extern void *memset(void *buffer, int c, int count);

功能:把buffer所指内存区域的前count个字节设置成字符c。

包含头文件:<string.h>

注意这个函数是字符串函数,所以一定要包含字符串头文件。

使用方法:

int a[50];

memset(a,0,sizeof(a));

这样呢,就将数组a内所有的值都赋成0了,sizeof也是一个函数,得到数组a的字节大小。

另外需要注意的是,memset函数是逐字节进行填充,所以a一般为char *型。对于其它类型的a,可以填充的值有两个,0和-1。因为计算机中用二进制补码表示数字,0和二进制补码为全0,-1的二进制补码为全1。

 

2.

new用法:

          1.     开辟单变量地址空间

               1)new int;  //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a. 

               2)int *a = new int(5) 作用同上,但是同时将整数赋值为5

          2.     开辟数组空间

               一维: int *a = new int[100];开辟一个大小为100的整型数组空间

               二维: int **a = new int[5][6]

               三维及其以上:依此类推.

         一般用法: new 类型 [初值]

delete用法:

          1. int *a = new int;

               delete a;   //释放单个int的空间

          2.int *a = new int[5];

               delete [] a; //释放int数组空间

 

          要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问.

 

3、如果在同一个进程内,用指针NEW一个数组,而不是局部变量
如果不在同一个进程,用int等

同一工程的话要用同一结构体,并保证发送的是动太生成的结构体,不能是栈变量,因为PostMessage是不阻塞的,也就是说PostMessage返回了,另一窗口不一定执行到了.你的栈变量已经没了.
不同工程的两个窗口要用特定的消息,且结构内不能有CString的那种类型

 

4.例子:
typedef struct
{
.....
    set<string> setImsiUsr;      //累积用户数
} STRU_A;

typedef struct
{
    ....
    STRU_HIGH_ALARM_FILE_TAIL fileTail;
} STRU_INFO;
STRU_INFO  struInfo;
memset(&struInfo, 0, sizeof(struInfo));
执行了上面的语句之后,struInfo.fileTail.setImsiUsr.insert("Insert"); ---就死在这条语句上了,kill -9才能将进程杀掉。
原因:
1、含有指针的struct不能做memset
2、set内部是指针处理的

posted @ 2014-02-10 15:18  FREE小宝  阅读(1704)  评论(0编辑  收藏  举报