如何使C中的字符串数组具有动态大小?

问题描述 投票:0回答:1

C语言 我正在编写一个函数,该函数稍后依赖于生成一些文本,该文本必须保持本质上的长度:

115 letters minus the length of substring within <> from the original argument to the function
- (115 - 子字符串长度)。

但是,C 不接受具有动态值的

char text[value]
,我需要该代码中的它是动态的,并且取决于提取的子字符串的大小。

我该怎么做?

char* RandomText(char* originalMsg)
{
    char* subString;
    char msgClone[256];
    strcpy(msgClone, originalMsg);
    subString = strtok(msgClone, "<");
    subString = strtok(NULL, ">"); 

    int spewageSize = 115 - strlen(subString); //110 + safe buffer for \n and \0

    char text[spewageSize]; 

\\ the rest of the code follows here

}
arrays c string dynamic char
1个回答
0
投票

如注释中所述,支持可变长度数组的编译器将执行此操作。值得注意的是,GCC 可以,Clang 也可以实现兼容性,而 MSVC 则不能。

但是,内存很便宜,因此请为字符串分配足够的空间。如果您知道需要的最大值是 115,则使用该值即可。或者甚至分配更多空间。无论如何,您的编译器很可能会出于对齐目的。

如果您想要另一个字符串的重复项,并且该字符串需要从函数返回,您可能希望使用

strdup

© www.soinside.com 2019 - 2024. All rights reserved.