gpt4 book ai didi

c - 如何在 C 中不传递任何参数的情况下从函数返回字符串

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:00 25 4
gpt4 key购买 nike

我想编写一个只返回一个字符串的函数,这样我就可以这样做:

TCHAR sVar[256] = {0};
_stprintf(sVar,L"%s",GetCurrentTime());

我无法使用以下函数实现此功能 b/c 在返回值之前释放内存:

TCHAR *GetCurrentTime(void)
{
TCHAR *sVal;
sVal = (TCHAR *) calloc(64+1, sizeof(TCHAR));
GetCurrentTimeEx(sVal); // Populates
free(sVal);sVal=NULL;
return sVal;
}

我不能执行此函数,因为如果我不记得释放调用程序中的内存,就会发生内存泄漏,这违背了让简单函数返回 char 字符串的目的:

TCHAR *GetCurrentTime(void)
{
TCHAR *sVal;
sVal = (TCHAR *) calloc(64+1, sizeof(TCHAR));
GetCurrentTimeEx(sVal);
return sVal;
}

而且我不想从堆栈中声明内存。:

TCHAR *GetCurrentTime(void)
{
static TCHAR sVal[64];
GetCurrentTimeEx(sVal);
return sVal;
}

(这里是获取时间的函数):

DWORD GetTime(TCHAR *sCurrentTime)
{
TCHAR sTime[9] = {0};
if (_tstrtime_s(sTime, 9) == ERROR_SUCCESS)
{
INT i;
for (i=0;i<=4;i++)
sCurrentTime[i] = sTime[i];
return 1;
}
else
return 0;
}

我进行了搜索,但找不到这个非常常见问题的答案。有人能帮我吗?谢谢。

最佳答案

您可以使用 static 缓冲区来执行此操作,如您自己的示例所示:

char *GetCurrentTime(void)
{
static char sVal[64];
GetCurrentTimeEx(sVal);
return sVal;
}

实际上在堆栈上分配内存,而是在静态区域中分配内存。此解决方案不可重入且非线程安全,但它是在没有内存泄漏的情况下在 C 中获得您想要的确切习惯用法的唯一方法。

惯用的解决方案是让调用者负责内存分配,并将缓冲区作为参数传递。

关于c - 如何在 C 中不传递任何参数的情况下从函数返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789512/

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