如何从C函数返回字符串

了解如何从C函数返回字符串

在我的一个C程序中,我的任务是从一个函数返回一个字符串:

xxxxx myName() {
  return "Flavio";
}

棘手的事情是定义返回值类型。

C中的字符串数组char元素,因此我们不能真正返回字符串-我们必须返回一个指向字符串第一个元素的指针。

这就是为什么我们需要使用const char*

const char* myName() {
  return "Flavio";
}

这是一个示例工作程序:

#include <stdio.h>

const char* myName() {
  return "Flavio";
}

int main(void) { printf("%s", myName()); }

如果您希望将结果分配给变量,则可以像下面这样调用函数:

const char* name = myName();

我们可以写指针操作员*也以这种方式:

const char * myName()
const char *myName()

所有表格都是完全有效的。

注意使用const,因为我要从函数返回一个字符串字面量,用双引号定义的字符串,它是一个常量。

请注意,您无法在C中修改字符串文字。

要记住的另一件事是,您不能从C函数返回定义为局部变量的字符串,因为该变量将在函数执行完后自动销毁(释放),因此它将不可用,例如,如果您尝试做:

#include <stdio.h>

const char* myName() {
  char name[6] = "Flavio";
  return name;
}

int main(void) { printf("%s", myName()); }

您会收到警告和一些胡言乱语,如下所示:

hello.c:5:10: warning: address of stack memory
      associated with local variable 'name'
      returned [-Wreturn-stack-address]
  return name;
         ^~~~
1 warning generated.
B��Z> K���⏎

Notice the B��Z> K���⏎ line at the end, which indicates that the memory that was first taken by the string now has been cleared and there’s other random data in that memory. So we don’t get the original string back.

Changing myName() to

const char* myName() {
  char *name = "Flavio";
  return name;
}

makes the program work fine.

The reason is that variables are allocated on the stack, by default. But declaring a pointer, the value the pointers points to is allocated on the heap, and the heap is not cleared when the function ends.

Download my free C Handbook


More clang tutorials: