c - 内存分配与数组大小定义

标签 c

在 C 中,例如,任何时候我想处理字符串(C 不支持),我都可以做

 char* String = (char*) malloc(25);

或者

 char String[25];

我想知道这两种定义数组长度的方法在 C 中的主要区别是什么(除此之外,第一种是指针,第二种不是)。

我也想知道哪个更安全。

最佳答案

  1. char* String = (char*) malloc(25);
  2. char String[25];

这两个数组对象的主要区别在于生命周期。第一个对象的生命周期从 malloc 返回开始,到调用 free 结束。第二个有一个生命周期,这取决于它被声明的范围。在 block 范围内,对象是在 block 进入时创建的,直到 。在文件范围内,生命周期从程序开始,到程序结束时结束。

另一个区别是 String 在第一种情况下是一个指针,在第二种情况下是一个数组名。例如,sizeof String 在第一种情况下产生指针对象的大小,但在第二种情况下产生数组对象的大小。

最后一点,do not cast malloc 的返回值。

关于c - 内存分配与数组大小定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25047464/

相关文章:

c - 我怎样才能摆脱除法运算符?

c - 尝试为 C 导出 Haskell 库

c - 在 C 中使用 strstr() 查找最右边的匹配项

c - 丢弃标准输入流缓冲区中的无关字符

c - C 中的二维字符串数组

c - 在宏中使用开/关大括号强制在 C 中配对

c - 传递给函数调用的字符串文字存储在 c 中的什么位置

c++ - C/C++ 库从 Internet 广播和 Podcast Feeds 获取播放列表?

c - 如何检索从 ruby​​ 脚本传递的 C 中结构类型变量的结构成员?

c++ - 尝试使用 ffmpeg C API 取消执行和删除文件