我正在编写一个程序,将字母翻译成摩尔斯电码,然后将它们传输到 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 中,您无法返回对局部变量的引用(指针),因为当函数返回时它不再存在。
您需要将 te 缓冲区传递给该函数:
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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)