作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所示的函数:
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
最佳答案
如果要返回字符串,则必须使用动态内存分配。喜欢:
#include<stdio.h>
#include <stdlib.h>
char * function(char a)
{
char *hData = malloc(5); // Allocate memory
// Use hData just as if it was declared like hData[5]
sprintf(hData, "%02X", a);
hData[3] = 0;
return hData; // Return a pointer to the allocated memory
}
int main()
{
// Use it like
char* s = function('a');
printf("%s\n", s);
free(s);
return 0;
}
发布的代码返回一个指向局部变量的指针(即data
)。这是无效的,因为函数返回后局部变量就会超出范围(即不再存在)。因此,您需要使用 malloc
,因为使用 malloc
分配的内存在您显式释放它之前一直有效。
关于c - 如何从c中的函数正确接收字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44082676/
我是一名优秀的程序员,十分优秀!