Я хочу написать функцию, которая просто возвращает строку, чтобы я мог сделать это:
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;
}
и я не могу выполнить эту функцию, потому что есть утечка памяти, если я не помню, чтобы она освобождала память в вызывающей программе, что сводит на нет цель заставить простую функцию возвращать строку символов:
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;
}
Я искал, но не мог найти ответ на этот довольно распространенный вопрос. Кто-нибудь может мне помочь? Спасибо.