【发布时间】:2017-10-20 07:54:15
【问题描述】:
我有如下功能:
char * function(char a)
{
char data[5];
char *hData;
sprintf(data,"%02X",a);
data[5] = '\0';
hData = data;
return hData;
}
所以基本上 a 是 170,我需要将其转换为等效的十六进制 AA 并返回它。在 sprintf 之后它被转换为 AA 但我无法返回数组,所以我将它保存到字符串 hData 然后返回它。 hData 在返回时包含 AA。
在我的主要功能中,我收到如下:
char *hex;
hex = function(buf[0]); //This line gives warning
十六进制包含数据AA,但为什么它会发出警告。
警告说:
assignment makes pointer from integer without a cast
【问题讨论】:
-
您在函数中返回指向局部变量 (data) 的指针。函数返回后 - 它将低于堆栈指针。因为结果可以随时修改(或在第一次调用另一个函数之后)。这当然是错误的。最好的 - 你需要传递指向字符串的指针作为参数。所以在调用函数中分配字符串。作为替代方案,您需要从堆或函数中的另一个存储中分配字符串,以便返回它。但返回堆栈中局部变量的地址 - 这是错误
-
错误信息表明你在调用它之前没有声明
function()。这是 C99 或更高版本中的编译错误 - 您必须在 C90 模式下使用编译器(这是允许的,但编译器假定未声明的函数返回int- 当函数返回指针时会导致错误)。