我该如何修改这个LPSTR?

时间:2011-11-14 23:44:49

标签: c winapi api

让我们假设我有这个变量

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

3 个答案:

答案 0 :(得分:2)

LPSTRchar *的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例程而不是sprintfLPTSTR在定义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 *