【发布时间】:2013-03-05 10:42:19
【问题描述】:
是否可以在不调用malloc 的情况下从函数返回字符串?
我的功能如下:
char* getString(){
char tempStr[20]
// open file, read char by char and assign to tempStr
// ....
char* str = (char*)malloc(sizeof(char)*20);
strcpy(str, tempStr); // assume this copy the null terminating char as well
return str;
}
然后当我调用getString() 时,我将返回值分配给char*,然后在完成后释放它,如下所示:
void randomFunction(){
char* line = NULL;
int i = 0;
while (i < 1000) {
line = getString();
// do stuff with line
free (line);
line = NULL;
}
}
但是,我想知道如果没有malloc,是否有任何方法可以做到这一点?而且,这是从 C 函数返回字符串的正确方法吗?
我试图做一些关于如何在没有malloc 的情况下返回的研究,但没有找到明确的答案。我是 C 新手,还在学习。
【问题讨论】:
-
你的
malloc调用最好写成char *str = malloc(20);sizeof (char)定义为 1,并且强制转换malloc的结果是不必要的,not recommended。 -
@KeithThompson 我从来不知道强制转换 malloc 的结果会带来不良行为。谢谢(你的)信息! :)
-
@KeithThompson 我不建议省略 sizeof(char);将它保留在那里是一个好习惯,这将是一个糟糕的编译器,不会对其进行优化。此外,反对强制使用 malloc 的论点对我来说总是很愚蠢。它在 C++ 中是必需的,在我看来,您最好尽可能编写语言可移植的代码。
-
@Dave:至于转换
malloc的结果,在这种情况下,转换没有真正的目的。一般来说,演员阵容应该被怀疑。我不同意编写语言可移植代码的优点。从 C++ 调用 C 代码很容易,反之亦然;编写可以编译为 C 或 C++ 的代码几乎没有任何真正的优势。决定你用什么语言写作,然后用那种语言写作。 -
@Dave 在 C++ 中你使用
new,所以关于malloc的争论是没有意义的。