【发布时间】:2011-11-27 13:16:39
【问题描述】:
我遇到了一个问题,我不确定这是否是一个问题。我有一个简单的 C 函数,它可以像这样从字符串传递一个 char*:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
passString("hello");
return (EXIT_SUCCESS);
}
void passString(char * string) {
// .... some code ....
free(string); // ???
}
我被教导要释放我不再使用的每个内存块(主要是数组)。所以我的想法也是释放字符串,但即使是这个简单的例子,程序也会冻结或崩溃。我不确定我是否真的需要在这里释放字符串,如果需要,我该如何实现?
【问题讨论】:
-
@Kos: 错误,字符串文字的类型是
char[N],而N刚好足够容纳字符串文字中的所有字符和一个零终止符。"foobar"的类型是char[7]。我相信其他语言(即 C++)是有区别的。 -
哎呀...你完全正确。我实际上的意思是“请使用 const char* 来引用字符串文字”。
-
@Kos: 仅在 C++ 中不推荐将
char *用于字符串文字,而不是在 C 中。但是,是的,修改字符串文字在 c 和 c++ 中都是 UB。 -
是的,我指的是推荐,而不是弃用。 C 可能不像 C++ 那样类型安全,但保持良好实践并没有什么坏处。