zoukankan      html  css  js  c++  java
  • 柔性数组使用备忘

     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
    ", (int)(sizeof(struct package) + p->msg_len));
    41      printf("message:%s", p->msg);
    42 }

    零长数组一般被放置在一个结构体的末尾,作为扩
    展内存大小的占位符而存在的,这是数组唯一可以“越界”访问的场合
     。 用在封装数据包的场合(因为数据包大小是不确定的)

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

      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 ", (int)(sizeof(struct package) + p->msg_len)); 41     printf("message:%s", p->msg); 42 }

  • 相关阅读:
    关于java 定时任务
    centos 安装mysql
    javamelody 使用
    spring boot单元测试(转)
    关于CSS中的PX值(像素)
    CSS各个浏览器Hack的写法
    RGB颜色二值化
    关于promise对象的笔记
    关于跨域的问题
    JavaScript笔记
  • 原文地址:https://www.cnblogs.com/timemachine213/p/10676029.html
Copyright © 2011-2022 走看看