C语言 我需要为一个50个字符的X字符串数组分配多少内存?



我需要为我的一个CS类中的程序创建一个字符串数组。我们只需假设所有字符串的长度不超过50(这考虑了空字符)。

我需要使用malloc()calloc()为数组分配适量的内存,但我是C的新手,我真的不知道如何使用这些函数。

我想真正的问题是我需要为50个字符的x字符串数组分配多少内存。

假设类型为char,则至少需要X * sizeof(char) * 50

如果您单独执行所有这些分配,则每个分配都会有开销。所以在这种情况下,内存总量会更高。

此开销未指定,可能相当大。

但是我不会为家庭作业担心。我无法想象这个问题需要足够的内存来运行你的系统。

称为字符串的终止字符。

你需要的是一个char指针数组。

char *strArrayPtr[X]; // X needs to be a compile time constant.
                      // C99 supports variable length arrays too.

现在每个索引都包含一个指向malloc(50)分配的数组的指针;

的例子:

#include <stdlib.h>
#include <stdio.h>
int main() {
    char *ar[2] ;
    ar[0] = "Hello";  // This needs to malloced memory in your case
    ar[1] = "World!"; // i.e., ar[0] = malloc(50);
    printf("%s", ar[0]);
    return 0;
}

如果你想用固定长度的字符串创建一个可变大小的数组:

char **arr = calloc(len, 50 * sizeof(char));

别忘了释放内存!

for(unsigned long i = 0; i < len; ++i)
    free(*arr++);

你不会动态地push元素吧?如果是这样,我们就得弄得更复杂一点。(我会添加一个StringArray::capacity,以加快push,但我不想让事情过于复杂……看看我的C语言有多烂,如果你看看下面的评论。;)

struct StringArray
{
    char** arr;
    unsigned long len = 0;
};
StringArray StringArray_init(char** arr = NULL, unsigned long len = NULL)
{
    StringArray a;
    a.arr = arr;
    a.len = len;
    return(a);
}
void StringArray_push(StringArray *a, char* str)
{
    if(len == 0)
    {
        a.arr = StringArrayInit(malloc(sizeof(char*)), 1);
    }
    else
    {
        a.len++;
    }
    a.arr = realloc(a.arr, a.len * sizeof(char*));
    a.arr[a.len - 1] = malloc((strlen(str) + 1) * sizeof(char));
    strcpy(a.arr[a.len - 1], str);
}
void StringArray_free(StringArray a)
{
    for(unsigned long i = 0; i < a.len; ++i)
        free(a.arr[i]);
}
StringArray szArr = StringArray_init();
StringArray_push(&szArr, "This is a string.");
StringArray_free(szArr);

用c++就简单多了。:)

std::vector<std::string> arr;
arr.push_back("This is a string."); 

相关内容

  • 没有找到相关文章

最新更新