如何返回变量?

How to return variable?

提问人:auem 提问时间:10/11/2022 更新时间:10/11/2022 访问量:84

问:

我正在编写一个程序,将字母转换为莫尔斯电码,然后将它们传输到 LED 并闪烁。我无法返回值“.- -...”

#include <stdio.h>
#include <string.h>

char *encode()
{
  char *name = "AB";
  char name_m[100] = "";

  for (int i = 0; i < strlen(name); i++)
  {
    if (name[i] == 65)
    {
      strcat(name_m, ".- ");
    }
    else if (name[i] == 66)
    {
      strcat(name_m, "-...");
    }
  };
  printf("%s", name_m);
  
  return name_m;
}

int main()
{
    char *name_m;
    name_m = encode();
    printf("\n%s", name_m);
}
main.c:22:10: warning: function returns address of local variable [-Wreturn-local-addr]
   22 |   return name_m;
      |          ^~~~~~
.- -...
(null)
C 阿杜伊诺

评论

2赞 J_Catsong 10/11/2022
您在 encode() 中返回的name_m是一个局部变量,如警告所示。因此,在返回 encode() 后,您不能指望该值有任何有用之处。
0赞 SafelyFast 10/11/2022
您可以考虑几种解决方案:从 main 传入静态分配的数组,或者在编码函数中动态分配一些内存,然后返回该内存。
1赞 user16217248 10/11/2022
这回答了你的问题吗?使用 C 返回数组
0赞 John Demetriou 10/11/2022
问题已在此处得到解答 stackoverflow.com/questions/11656532/returning-an-array-using-c

答:

2赞 0___________ 10/11/2022 #1

在 C 中,你不能返回对局部变量的引用(指针),因为当函数返回时,它就不再存在。

您需要将 te buffer 传递给函数:

char *encode(char *name_m, const char *name)
{
  for (int i = 0; i < strlen(name); i++)
  {
    if (name[i] == 'A')
    {
      strcat(name_m, ".- ");
    }
    else if (name[i] == 'B')
    {
      strcat(name_m, "-...");
    }
  }
  printf("%s", name_m);
  
  return name_m;
}

动态分配它:

char *encode( const char *name)
{
  char *name_m = malloc(100);

  if(name_m)
  {
    for (int i = 0; i < strlen(name); i++)
    {
        if (name[i] == 'A')
        {
        strcat(name_m, ".- ");
        }
        else if (name[i] == 'B')
        {
        strcat(name_m, "-...");
        }
    }
    printf("%s", name_m);
  }
  
  return name_m;
}

或最糟糕的解决方案 - 将其定义为静态

char *encode( const char *name)
{
  static char name_m[100];

  if(name_m)
  {
    for (int i = 0; i < strlen(name); i++)
    {
        if (name[i] == 'A')
        {
        strcat(name_m, ".- ");
        }
        else if (name[i] == 'B')
        {
        strcat(name_m, "-...");
        }
    }
    printf("%s", name_m);
  }
  
  return name_m;
}

上一个:指针概念

下一个:指针比较警告