Tag: 变长

将动态大小的可变长度数组(VLA)初始化为0

以下代码行,在堆栈上创建一个可变长度数组: char name[length] = {‘\0’}; 生成以下编译器诊断: error: variable-sized object may not be initialized warning: excess elements in array initializer warning: (near initialization for ‘name’) 有哪些选项可用于初始化VLA? 我被迫使用如下行: memset(name, 0, sizeof(name)); 代替?

如何在C中实现可变长度的’string’-y

我已经google了很多,但我找不到有关如何在高级语言中实现可变长度字符串的信息。 我正在创建自己的这种语言,我不知道从哪里开始使用字符串。 我有一个描述string类型的结构,然后是一个分配这样一个’字符串’的create函数: /* A safer `strcpy()`, using `strncpy()` and `sizeof()` */ #define STRCPY(TO, FROM) \ strncpy(TO, FROM, sizeof(TO)); TO[sizeof(TO) – 1] = ‘\0’ struct string { // … char native[1024]; }; string String__create(char native[]) { string this = malloc(sizeof(struct string)); // … STRCPY(this->native, native); return this; } 但是,这只允许1kb长的字符串。 这有点愚蠢,在大多数情况下会浪费大量内存。 鉴于我必须以某种方式声明要使用的内存…我如何实现一个能够(有效地)存储(有效)无限数量的字符的字符串?