[英]C++ Concatenate two char * to LPTSTR for command line arguments
我是C ++的新手,但我正在嘗試在Windows中構建一個程序來解決並發問題,其中父進程將啟動子進程。 是否有一個Windows函數將從我的方法BuildChildProcess(char * arg1, char * arg2)
獲取arg1和arg2,並將這兩個參數連接到要在CreateProcess函數中使用的LPTSTR
命令行字符串?
在我得知它是不安全的之前,我只用其中一個參數嘗試了strcat
,所以我接着嘗試了strcat_s
但要么它不能用於我正在嘗試做的事情,要么我做錯了。 如果我應該使用它,那么它的使用的工作示例將有所幫助。
謝謝
編輯:基本上,我如何將兩個char *
C樣式字符串(arg1和arg2)連接到CreateProcess
函數的lpCommandLine參數的末尾,該函數是類型LPTSTR
?
您可以使用以下代碼:
BuildChildProcess(char * arg1, char * arg2){
char buff[256];
sprintf_s(buff, 256, TEXT("%s%s"), arg1, arg2);
.........
}
然后buff將包含兩個char *。 如果您需要使用unicode字符串,則需要unicode版本的sprintf_s。
https://msdn.microsoft.com/en-us/library/ce3zzk1k.aspx
如果你需要從char轉換為UNICODE,那么有API函數MultiByteToWideChar()
https://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx
由於您使用C ++,因此可以使用標准庫字符串。 您對TCHAR
使用令人困惑。 是char
還是wchar_t
? 如果是前者,為什么不支持Unicode呢? 您不應該使用僅存在的TCHAR
來幫助需要在沒有Unicode支持的Windows 9x上運行的代碼。
從問題的其他部分開始,您希望連接兩個名為arg1
和arg2
char*
C字符串。 這樣做:
#include <string>
....
std::string str1 = arg1;
std::string str2 = arg2;
std::string combined = str1 + str2;
它可以寫得更簡潔,但我想讓它明確。
然后傳遞combined.c_str()
如果您需要一個const char*
或&combined[0]
如果需要char*
。 char*
的后一個選項要求您使用C ++ - 11或更高版本。
就個人而言,我將在這里使用原生的Unicode Unicode API。 這意味着std::wstring
而不是std::string
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.