工作中的 C struct hack

标签 c

这是在使用 C struct hack 时如何使用分配的“额外”内存?

问题:

我在下面有一个 C struct hack 实现。我的问题是如何使用通过 hack 分配的“额外”内存。有人可以给我一个使用额外内存的例子吗?

#include<stdio.h>
#include<stdlib.h>

int main()
{

    struct mystruct {

        int len;
        char chararray[1];

    };

    struct mystruct *ptr = malloc(sizeof(struct mystruct) + 10 - 1);
    ptr->len=10;


    ptr->chararray[0] = 'a';
    ptr->chararray[1] = 'b';
    ptr->chararray[2] = 'c';
    ptr->chararray[3] = 'd';
    ptr->chararray[4] = 'e';
    ptr->chararray[5] = 'f';
    ptr->chararray[6] = 'g';
    ptr->chararray[7] = 'h';
    ptr->chararray[8] = 'i';
    ptr->chararray[9] = 'j';


}

最佳答案

是的,这是(并且曾经是)C 中创建和处理可变大小的 struct 的标准方式。

这个例子有点冗长。大多数程序员会更巧妙地处理它:

struct mystruct {
        int len;
        char chararray[1];  // some compilers would allow [0] here
    };
    char *msg = "abcdefghi";
    int n = strlen (msg);

    struct mystruct *ptr = malloc(sizeof(struct mystruct) + n + 1);

    ptr->len = n;
    strcpy (ptr->chararray, msg);
}

关于工作中的 C struct hack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16553542/

相关文章:

c - ffmpeg录制h264直播流出错

c - 在cdecl调用约定中,signed char和short如何作为参数传递

c - 指向结构的嵌套指针包含指向包含结构的指针?

c - CUDA 中的多精度乘法

c - C 中指针的不同用途

c - 如何计算C中每行输入的单词数

c - 寻找一种更好的方法来移动 C 中的字符数组

c - 使用 strcpy 到 calloc 位置时大小为 1 的写入无效

c - 为什么我的 C 二进制到十进制程序没有返回正确的值?

c - 为什么添加线程会使这个简单的套接字服务器更快?