arrays - 函数中 str[strlen(src)+1] 和 char *str=(char*)malloc((strlen(src)+1)*sizeof(char)) 的区别

标签 arrays c pointers malloc heap-memory

我很困惑。有什么区别:

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 of char[] is not actually known before the program begins(is it correct understanding!?)

没有。您正在使用 的可变长度数组功能添加自 .这不是动态分配。
一旦函数完成其执行 str 将不再存在并且返回指向它的指针将调用未定义的行为。

关于arrays - 函数中 str[strlen(src)+1] 和 char *str=(char*)malloc((strlen(src)+1)*sizeof(char)) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35100976/

相关文章:

c - 如何使结构的数组之一到空位置?

c - 在研究 K&R 的 "The C Programming Language"之前要学习/研究哪些主题(基础知识或基础或基础知识或什么)?

C++:指针语法之间的差异

java - 如何在开始 Activity 后获取新图像(来自数组)?

javascript - 如何检查其他数组中存在的值,反之亦然

javascript - 从 JavaScript 中的文本返回数组

c - 接受多个 UDP 连接的套接字控件

c - 如何判断所有括号是否平衡(C)

c - 0 如何分配给变量 'a' ?

c - 如何将未知类型的指针传递给函数?