C ++将两个char *连接到LPTSTR以获取命令行参数

时间:2015-02-27 02:56:02

标签: c++ winapi visual-c++

我是C ++的新手,但是我试图在Windows中构建一个程序来解决并发问题,其中父进程将启动子进程。是否有一个Windows函数将从我的方法BuildChildProcess(char * arg1, char * arg2)中获取arg1和arg2,并将这两个参数连接到要在CreateProcess函数中使用的LPTSTR命令行字符串?

在我了解到它不安全之前,我只使用其中一个参数尝试了strcat,所以我尝试了strcat_s,但要么它不适用于我所做的事情#&# 39;我试图做或我做错了。如果我应该使用它,那么它的使用的一个有效例子会有所帮助。

由于

编辑: 基本上,我如何将两个char * C样式字符串(arg1和arg2)连接到CreateProcess函数的 lpCommandLine 参数的末尾,该类型为LPTSTR类型}?

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码:

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

答案 1 :(得分:0)

由于您使用C ++,因此可以使用标准库字符串。您对TCHAR的使用令人困惑。是char还是wchar_t?如果是前者,为什么不支持Unicode呢?您不应该使用仅存在的TCHAR来帮助需要在没有Unicode支持的Windows 9x上运行的代码。

从问题的其他部分开始,您希望连接两个名为char*arg1的{​​{1}}个C字符串。这样做:

arg2

它可以写得更简洁,但我想让它明确。

如果您需要#include <string> .... std::string str1 = arg1; std::string str2 = arg2; std::string combined = str1 + str2; combined.c_str(),则需要const char*,然后通过&combined[0]char*的后一个选项要求您使用C ++ - 11或更高版本。

我个人在这里使用原生的Unicode API。这意味着char*而不是std::wstring