C - 在函数中初始化全局数组

Dan*_*iel 7 c arrays initialization

我有一个我想要创建全局的数组,我想在函数调用中初始化.我想首先声明它而不知道它的大小:

char str[];
Run Code Online (Sandbox Code Playgroud)

然后初始化它:

str = char[size];
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我对c很新,也许我在这里完全走错路,任何帮助都会非常感激.

Nat*_*man 9

做到这一点的方法是malloc.首先声明一个指针:

char *str;
Run Code Online (Sandbox Code Playgroud)

然后在init函数中你malloc:

str = malloc(sizeof(*str) * size_of_array);
Run Code Online (Sandbox Code Playgroud)

这将分配指向(在这种情况下)size_of_array的大小的元素.strchar

您应该检查分配是否失败:

if (str == NULL) {
    // allocation failed
    // handle the error
}
Run Code Online (Sandbox Code Playgroud)

通常情况下,你必须确保free在完成后分配内存.但是,在这种情况下str是全局的,因此它永远不会超出范围,并且free在程序结束时内存将为d.

  • 在C中你不应该真正地转换malloc的结果 - 你只需要在C++中这样做 - 它应该在C中避免,因为它可以掩盖其他有用的警告. (4认同)
  • 如果你想成为一般,使用`sizeof(*str)`,所以你不必重复类型名称.此外,在C中你不应该转换malloc的结果. (2认同)