簡體   English   中英

從 C++ 中的函數返回字符串

[英]Returning strings from functions in C++

我有一個 function:

BOOL ReadWebPage(CONST TCHAR *sURL, TCHAR *sDataRead)
{
BOOL rv = FALSE
TCHAR *sFile = new TCHAR[1024]();
StringCchCopy(sFile, 1024, L"c:\\temp\\file.txt");
res = URLDownloadToFileW(NULL, sURL, sFile, 0, NULL);
if (res != S_OK)
    StringCchCopy(sDataRead, 16, L"Error"); 
else {
    StringCchCopy(sDataRead, 16, L"File exists on remote server");
    rv = TRUE; }
delete[] sFile;
return rv;
}

如果它是*sDataRead ,那么調用行會像這樣調用這個 function :

ReadWebPage(L"http://www.example.com/test.txt", sTest);

如果它是**sDataRead ,那么調用行會像這樣調用這個 function :

ReadWebPage(L"https://www.example.com/test.txt", &sTest);

我的問題是,我應該在 function 中為ReadWebPage原樣聲明*sDataRead ,還是將其聲明為**sDataRead更有效,還是沒有任何區別?

根據評論,我想我可以非常果斷地回答這個問題:這個 function 的寫法如此糟糕,以至於您假設從更改簽名中獲得的任何收益都完全無關緊要。

此外,提議的更改(從TCHAR*TCHAR** )是語義上的。 當然,它還涉及一種間接方式,但最重要的是,它允許您修改指針值,如果您只是填充預分配的緩沖區,這根本不是您需要或想要的。

此外,如果目標是填充預分配的緩沖區,則排除 function 本身的分配。 事實上,一旦你完成了分配,你可以很容易地直接返回sFile ,避免復制。

如果這可行(例如,因為無論如何您在此調用之前分配了緩沖區),那么合理的結論是放棄輸出參數並簡單地返回結果。

事實上,如果你使用標准容器,你也可以吃蛋糕; 通過自定義用於返回容器的分配器,您可以使其使用所需的 memory 而無需使用外參數破解。 不過,對於這個答案,該解決方案有點偏離 scope 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM