让我们假设我有这个变量
LPTSTR cmdArgs = "D:\\path\my.exe -user blah PLATFORM=0 DEVICE=0 -k poclbm VECTORS BFI_INT WORKSIZE=128 AGGRESSION=7";
请注意 DEVICE = 0 的位置,在我的情况下,它可能是DEVICE = 1或DEVICE = 2等。
这意味着,该字符串必须是动态的。我将把一个函数传递给一个函数,它应该在DEVICE之后出现,但是,我不知道如何将它添加到cmdArgs变量中。
我正在考虑使用sprintf并执行DEVICE =%d,但我不知道我是否可以将一个char变量(包含格式化的字符串)转换为LPSTR
答案 0 :(得分:2)
LPSTR
是char *
的typedef。您可以使用sprintf
将设备号插入字符串。
char cmdArgs[1000];
int deviceNum = 1;
sprintf( cmdArgs, "D:\\path\\my.exe -user blah PLATFORM=0 DEVICE=%d -k poclbm VECTORS BFI_INT WORKSIZE=128 AGGRESSION=7", deviceNum );
修改强>
由于代码段显示LPTSTR
,您可能希望使用TCHAR例程而不是sprintf
。 LPTSTR
在定义whcar_t *
预处理程序符号时_UNICODE
的类型定义为char *
,如果未定义该符号或_MBCS
已定义,则TCHAR cmdArgs[1000];
int deviceNum = 1;
_stprintf( cmdArgs, _T(""D:\\path\\my.exe -user blah PLATFORM=0 DEVICE=%d -k poclbm VECTORS BFI_INT WORKSIZE=128 AGGRESSION=7"), deviceNum );
。
{{1}}
答案 1 :(得分:1)
您的摘要说LPSTR,但您的代码块说LPTSTR。这些(可能)是不同的东西,取决于你是否为Unicode构建。
在unicode构建中,LPTSTR是wchar_t *。在非unicode中,LPTSTR是char *。在这两种情况下,LPSTR都是char *。
winnt.h有这些typedef(这些不是文字的typedef,我在这里有点解释):
typedef char CHAR;
typedef CHAR *LPSTR;
typedef wchar_t WCHAR;
typedef WCHAR *LPWSTR;
#ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;
#endif
如果您正在构建非Unicode,那么带有%d的sprintf将按照其他人的指定执行您想要的操作。
答案 2 :(得分:0)
为什么不使用%s,因为你有char *
。