柔性数组使用备忘

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 #include <string.h>
 5 #include <strings.h>
 6 
 7 struct package  //声明数据包
 8 {
 9      int msg_len;
10      /*
11       *
12       *any other data
13       */
14      char msg[0];//零长度数组(即柔性数组)
15 };
16  
17 void test_package(struct package *p);
18  
19 int main(void)
20 {
21      char buffer[100];
22  
23      while(1)
24      {
25          fgets(buffer, 100, stdin);//将一些数据写进buffer中
26  
27          struct package *p = malloc(sizeof(struct package) + strlen(buffer) + 1);
28  
29          p->msg_len = strlen(buffer) + 1;
30          strncpy(p->msg, buffer, p->msg_len);
31  
32          test_package(p);
33      }
34  
35      return 0;
36 }
37  
38 void test_package(struct package *p)
39 {
40      printf("total len:%d\n", (int)(sizeof(struct package) + p->msg_len));
41      printf("message:%s", p->msg);
42 }

零长数组通常被放置在一个结构体的末尾,做为扩
展内存大小的占位符而存在的,这是数组惟一能够“越界”访问的场合
 。 用在封装数据包的场合(由于数据包大小是不肯定的)数组

在不一样的客户机之间发送一些信息,这些信息
包括一些固定长度的数据,好比客户机的
IP 地址、主机名等,还包含一些长度不肯定的数
据,好比用户自定义的文本或者文件
  spa

  1 #include <stdio.h>  2 #include <stdlib.h>  3 #include <unistd.h>  4 #include <string.h>  5 #include <strings.h>  6   7 struct package  //声明数据包  8 {  9     int msg_len; 10     /* 11      * 12      *any other data 13      */ 14     char msg[0];//零长度数组(即柔性数组) 15 }; 16  17 void test_package(struct package *p); 18  19 int main(void) 20 { 21     char buffer[100]; 22  23     while(1) 24     { 25         fgets(buffer, 100, stdin);//将一些数据写进buffer中 26  27         struct package *p = malloc(sizeof(struct package) + strlen(buffer) + 1); 28  29         p->msg_len = strlen(buffer) + 1; 30         strncpy(p->msg, buffer, p->msg_len); 31  32         test_package(p); 33     } 34  35     return 0; 36 } 37  38 void test_package(struct package *p) 39 { 40     printf("total len:%d\n", (int)(sizeof(struct package) + p->msg_len)); 41     printf("message:%s", p->msg); 42 }code

相关文章
相关标签/搜索