我很困惑。有什么区别:
char *someFunction(char *src) {
char str[strlen(src) + 1];
...
return str;
}
和
char *someFunction(char *src) {
char *str = (char*)malloc((strlen(src) + 1) * sizeof(char));
...
return str;
}
第一个是数组 (char[]
),第二个是 malloc
。
我在学校学到的是,如果我想在函数中创建一个新的字符字符串,我应该使用 malloc
。但是,它也可以在一个函数中与 char[]
一起使用(如第一个)。
老师说一定要用“heap-area”,如果一定要动态分配的话。
我认为第一个数组 (char str[..]
) 也是动态的,因为 char[]
的大小在程序开始之前实际上并不知道(这是正确的理解!?)。这一个在我的编译器上没有任何问题。
请简单地解释一下区别,并告诉我一些必须使用 malloc
和不需要使用它的情况。
最佳答案
I thought the first one with array(
char str[..]
) is also dynamically, because the size ofchar[]
is not actually known before the program begins(is it correct understanding!?)
没有。您正在使用 c 的可变长度数组功能添加自 c99 .这不是动态分配。
一旦函数完成其执行 str
将不再存在并且返回指向它的指针将调用未定义的行为。
关于arrays - 函数中 str[strlen(src)+1] 和 char *str=(char*)malloc((strlen(src)+1)*sizeof(char)) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35100976/