摘要:在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组。此时,我们可以使用结构体的方法实现C语言变长数组。

struct MyData 
{
 int nLen;
 char data[0];
}; 
在结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体MyData之后,而这个地址就是结构体后面数据的地址(如果给这个结构体分配的内容大于这个结构体实际大小,后面多余的部分就是这个data的内容);这种声明方法可以巧妙的实现C语言里的数组扩展。
实际用时采取这样:
struct MyData *p = (struct MyData *)malloc(sizeof(struct MyData )+strlen(str))
这样就可以通过p->data 来操作这个str。

程序实例:

struct MyData 
{
 int nLen;
 char data[0];
};

int main()
{
 int nLen = 10;
 char str[10] = "123456789";

 cout << "Size of MyData: " << sizeof(MyData) << endl;

 MyData *myData = (MyData*)malloc(sizeof(MyData) + 10);
 memcpy(myData->data, str, 10);

 cout << "myData's Data is: " << myData->data << endl;

 free(myData);

 return 0;
}

输出:

Size of MyData: 4
myData"s Data is: 123456789

C语言变长数组 struct中char data[0]的用法相关推荐

  1. C语言变长数组data[0]【总结】

    C语言变长数组data[0][总结] 1.前言 今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在li ...

  2. c语言变长数组参数,使用gdb跟踪C语言中变长数组的实现

    项目的代码中出现的一个问题,问题的表现是,在一个函数中使用到了变长数组,而对超过这个数组 范围的一个赋值,导致了数组首地址为空. 我把这个问题抽出来形成了一个示例函数,在i386下也出现类似的问题,代 ...

  3. C语言变长数组(柔性数组)

    变长数组(柔性数组) C99支持变长数组,定义时可以不指定数组长度,分配时再根据实际长度进行分配. 变长数组一般只能放在结构体的最后一个成员, 在变长数组之前至少得有一个结构体成员 且一个结构体只能有 ...

  4. c99变长数组_C语言变长数组使用详解

    看如下代码: #include typedef struct { int len; int array[]; }SoftArray; int main() { int len = 10; printf ...

  5. 第六章 C语言数组_C语言变长数组:使用变量指明数组的长度

    在<C语言的三套标准:C89.C99和C11>一节中我们讲到,目前经常使用的C语言有三个版本,分别是 C89.C99 和 C11.C89(也称 ANSI C)是较早的版本,也是最经典的版本 ...

  6. c语言变长数组_2018级C语言大作业 - 祖玛

    C语言 - 祖玛https://www.zhihu.com/video/1226223520021295104 分享18级同学大一上学期用C语言实现的祖玛.分步骤代码.图片音乐素材.可执行程序可从百度 ...

  7. C语言,变长数组的用法

    ​ 在我的<C语言,结构体成员的地址>文章中,定义了一个demo_node结构体,其中用到变长数组char addr[0].本文以此为例,对C语言变长数组的基本用法展开介绍. #pragm ...

  8. C99中的变长数组(VLA)

    处理二维数组的函数有一处可能不太容易理解,数组的行可以在函数调用的时候传递,但是数组的列却只能被预置在函数内部.例如下面这样的定义: #define COLS 4 int sum3d(int ar[] ...

  9. char data[0]在struct末尾的用法

    在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组.此时,我们可以使用结构体的方法实现C语言变长数组. struct MyData { int nLen; char data[0] ...

最新文章

  1. awk数组命令经典生产实战应用拓展
  2. 你有哪些deep learning(rnn、cnn)调参的经验?
  3. 亚马逊、谷歌和微软寸土必争的新战场
  4. win8中离线安装net framework 3.5
  5. SQL优化之列裁剪和投影消除
  6. Docker多步构建更小的Java镜像
  7. Kindeditor放置两个调用readonly错误
  8. JAVA绘制图片原理_java开发_图片截取工具实现原理
  9. 设置builder.max_workspace_size的意义
  10. 玩转python字典与列表(下)
  11. 表贴电阻尺寸与什么有关_贴片电阻功率及封装尺寸
  12. 软件测试的测试方法有哪些?
  13. 计算机专用的英语词汇总结
  14. 简历类个人网站如何制作?
  15. 在线客服系统源码(外贸多语言带翻译网页在线客服系统源码完整搭建)
  16. 预测股市?echart折线图展示CPI,PPI剪刀差和股市的关系
  17. AngularJs搭配Bootstrap-select的防坑指南
  18. 云开发小程序editor富文本编辑器上传图片实现增删改
  19. Hrm-人力资源系统开发笔记02
  20. 三菱A系列老PLC的数据采集,MES系统采集,工业智能数据采集底层硬件方案

热门文章

  1. 第三十四天 how can I 坚持
  2. ArcGIS Engine 10开发环境的一些常见问题(转载)
  3. Angular自学笔记(?)ContentChild和ContentChildren
  4. 影视感悟专题---1、B站-魔兽世界代理及其它乱七八糟
  5. js forEach
  6. windows驱动开发详解学习笔记
  7. windows mobile开发循序渐进(6)windows mobile device center 使用问题
  8. 深入理解vue中的slot与slot-scope
  9. javascript --- js中的作用域 变量提升
  10. vue --- 提交表单到服务器