让我们假设一下我有一个变量
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和do DEVICE=%d,但我不知道是否可以将char变量(它将包含格式化的字符串)转换为LPSTR
发布于 2011-11-15 00:01:01
LPSTR是char *的类型--char *。可以使用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在定义_UNICODE预处理器符号时为whcar_t *,如果未定义该符号或定义了_MBCS,则为char *。
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 );发布于 2011-11-15 00:06:19
您的摘要显示LPSTR,但您的代码块显示LPTSTR。这些(可能)是不同的东西,取决于您是否正在为Unicode构建。
在unicode构建中,LPTSTR是一个wchar_t*。在非unicode中,LPTSTR是char*。LPSTR在这两种情况下都是char*。
H有这些类型(这些不是字面类型的类型,我在这里对它们作了一些解释):
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将执行您想要的操作,正如这里的其他人所指定的那样。
发布于 2011-11-14 23:48:38
为什么不使用%s,因为您有一个char *。
https://stackoverflow.com/questions/8129794
复制相似问题