内存分配与数组大小定义

JAX*_*JAX 0 c

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

 char* String = (char*) malloc(25);
Run Code Online (Sandbox Code Playgroud)

要么

 char String[25];
Run Code Online (Sandbox Code Playgroud)

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

我也想知道哪一个更安全.

oua*_*uah 5

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

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

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

最后要注意的是,不要转换返回值malloc.