在C语言中返回空字符串

5

在我的函数中,我想返回一个空字符串"",函数看起来像这样:

char *myFunction(nodeType *arg){
   if (something){
      return anotherFunction(arg);
   } else {
      return EMPTYSTRING;
   }
}

(EMPTYSTRING应被替换为正确的表达式以返回"")

我想出了一些方法:

return ""

return '\0'

如何正确地返回一个空字符串?


4
'\0' 不正确,那不是一个字符指针。你正在返回 null,而不是空字符串。 - Millie Smith
那么 "" 和 char* 是同一类型吗? - Misho Tek
2
我会在EMPTYSTRING的位置上返回NULL - babon
我不能返回NULL,因为后面我会连接返回的值,如果我必须检查每个返回的值是否为NULL,那么实现会更糟。 - Misho Tek
3
如果你不返回null,由于你返回的是“char *”而不是“const char *”,每次返回一个空字符串时都需要分配内存,这一点需要注意。使用“return”“”将会给你只读内存,不应该被释放。 - Millie Smith
静态常量 "" ? - Martin James
3个回答

8

返回""不是一个好主意。因为它是const char,你可能会尝试在从函数获取它的位置释放它,这可能会导致应用崩溃。

所以,我建议返回strdup(""),这样你就可以安全地释放它。


2
我不会在没有看到代码的情况下假设anotherFunction分配了内存。 - Artemy Vysotsky
1
@ArtemyVysotsky 我认为 anotherFunction 分配了内存,因为返回类型是 char * 而不是 const char *。虽然我承认他们完全有可能只是使用了错误的返回类型。@OP,请确保释放从 strdup 返回的字符串。 - Millie Smith

3

return '\0' 不正确,它是一个空字符。

return "";

更加正确。

在实现数据结构之前,您可以编写一个小的测试函数来测试返回空字符串。


3

\0 确实是一个空指针常量,而不是一个空字符串,因此返回它仍将返回一个空指针。

然而,你还有另一个问题。

如果 anotherFunction 返回一个你不需要使用 free() 释放的字符串,那么在这里返回 "" 是正确的。若它返回一段需要使用 malloc() 动态分配的字符串,则你还需要在此处返回一个动态分配的空字符串 - 使用 return calloc(1, 1); 即可解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接