C语言变长数组 struct中char data[0]的用法
2023-09-11 14:17:25 时间
版权声明:本文为博主原创文章,未经博主允许不得转载。
在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组。此时,我们可以使用结构体的方法实现C语言变长数组。
struct MyData { int nLen; char data[0];};
在结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体MyData之后,而这个地址就是结构体后面数据的地址(如果给这个结构体分配的内容大于这个结构体实际大小,后面多余的部分就是这个data的内容);这种声明方法可以巧妙的实现C语言里的数组扩展。实际用时采取这样:
- struct MyData *p = (struct MyData *)malloc(sizeof(struct MyData )+strlen(str))
程序实例:
#include <iostream> using namespace std; 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: 4myData"s Data is: 123456789
原文链接:http://www.2cto.com/kf/201312/261179.html
PS:必须将指针定义在struct的末尾,指针的类型也可以不为char。
相关文章
- C语言宏定义、条件编译
- C语言字符串函数总结
- 【C语言入门教程】5.4 递归
- C语言动态存储分配
- C语言深入理解通过指针引用多维数组(指针中使用起始地址 元素地址 元素值的区分)
- C语言深入理解通过指针引用多维数组(指针中使用起始地址 元素地址 元素值的区分)...
- 一道C语言安全编码题目
- C语言/C++常见习题问答集锦(五十一) 之约瑟夫环问题与字符统计
- C语言/C++常见习题问答集锦(二十一)
- ZZNUOJ_C语言1073:画个圈圈诅咒你(完整代码)
- ZZNUOJ_C语言1081:n个数求和 (多实例测试)(完整代码)
- ZZNUOJ_C语言1095:时间间隔(多实例测试)(完整代码)
- ZZNUOJ_用C语言编写程序实现1159:逆序输出数组元素(指针专题)(附完整源码)
- 【C语言】字符数组初始化方法
- 能让你成为更优秀程序员的10个C语言资源
- C语言每日面试之仿动态数组
- C语言每日面试之2元钱 有 1 毛 2 毛 5毛组成的情况有?
- C语言每日面试之字符串转小写
- 在C语言系统中,假设int类型数据占2个字节,则double、long、unsigned int、 char类型数据所占字节数分别多少()
- C语言 第七章 数组与字符串
- C语言使用技巧(十):与众不同地遍历出两数组中相同的元素
- 【呕心沥血花了好久才搞定的技巧】C语言如何将一数组里的部分元素保存到另一数组中去,并求出数组元素的个数?
- C语言之四种回调函数写法(五)
- Ubuntu下用glade和GTK+开发C语言界面程序(三)——学习make的使用方法
- 深入理解C语言中的指针与数组之指针篇(转载)
- C语言逆向——数组和结构体,数组多维只是一个编译构造的假象,本质会转成一维数组,结构体的话最难的就是对齐了
- C语言面试干货——指定数组初始化器(GCC手册解析)
- C语言求字符串的长度
- simulink中调用C语言进行仿真
- C语言进阶-指针与数组
- C语言入门之数组