gpt4 book ai didi

c - 如何从c中的函数正确接收字符串

转载 作者:行者123 更新时间:2023-11-30 14:57:12 24 4
gpt4 key购买 nike

我有一个如下所示的函数:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com