内存分配与数组大小定义

时间:2014-07-30 21:39:49

标签: c

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

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

或者

 char String[25];

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

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

1 个答案:

答案 0 :(得分:5)

  1. char* String = (char*) malloc(25);
  2. char String[25];
  3. 两个数组对象之间的主要区别是生命周期。第一个对象的生命周期从malloc返回开始,并在调用free时结束。第二个的生命周期取决于声明它的范围。在块范围内,在输入块时创建对象,直到}。在文件范围内,生命周期从程序开始,到程序结束时结束。

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

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