Обе эти функции заполняют TCHAR sStringA и sStringB. Вопрос в том, какой из них предпочтительнее и эффективнее для возврата результата?
#include <tchar.h>
#include <Windows.h>
void FunctionA(TCHAR *sString1, DWORD dwLen)
{
_tcscpy_s(sString1, dwLen, L"String1");
return;
}
void FunctionB(TCHAR **sString2, DWORD dwLen)
{
*sString2 = (TCHAR*)calloc(dwLen, sizeof(TCHAR));
_tcscpy_s(*sString2, dwLen, L"String2");
return;
}
int main()
{
TCHAR *sStringA = (TCHAR*)calloc(100, sizeof(TCHAR));
TCHAR *sStringB = NULL;
FunctionA(sStringA, 100);
FunctionB(&sStringB, 100);
free(sStringA);
free(sStringB);
}
Из моего комментария ниже, здесь FunctionC:
void FunctionC(TCHAR **sString2, DWORD dwLenOut)
{
TCHAR sString[] = L"String2";
dwLenOut = (DWORD) _tcslen(sString) + 1;
*sString2 = (TCHAR*)calloc(dwLenOut, sizeof(TCHAR));
_tcscpy_s(*sString2, dwLenOut, sString);
return;
}
int main()
{
TCHAR *sStringC = NULL;
DWORD dwLen = 0;
FunctionC(&sStringC, dwLen);
}