柔性數組使用備忘

 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

相關文章
相關標籤/搜索