C 如何修改此LPSTR?

C 如何修改此LPSTR?,c,winapi,api,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变量中 我正在考虑使用sprin

让我们假设有一个变量

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设备=%d,但我不知道是否可以将char变量(将包含格式化字符串)强制转换为LPSTR为什么不使用%s,因为您有一个
char*
为什么不使用%s,因为您有一个
char*

一个
LPSTR
是一个
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
<当定义了
\u UNICODE
预处理器符号时,code>LPTSTR
类型定义为
whcar\u t*
,如果未定义该符号或定义了
\u 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 );

LPSTR
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
<当定义了
\u UNICODE
预处理器符号时,code>LPTSTR
类型定义为
whcar\u t*
,如果未定义该符号或定义了
\u 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 );

您的摘要显示LPSTR,但您的代码块显示LPTSTR。这些(可能)是不同的东西,这取决于您是否在构建Unicode

在unicode版本中,LPTSTR是一个wchar\u t*。在非unicode中,LPTSTR是char*。在这两种情况下,LPSTR都是char*

h有这些typedef(这些不是字面上的typedef,我在这里对它们进行了解释):


如果您正在构建非Unicode,则具有%d的sprintf将按照此处其他人的指定执行您想要的操作。

您的摘要显示为LPSTR,但您的代码块显示为LPTSTR。这些(可能)是不同的东西,这取决于您是否在构建Unicode

在unicode版本中,LPTSTR是一个wchar\u t*。在非unicode中,LPTSTR是char*。在这两种情况下,LPSTR都是char*

h有这些typedef(这些不是字面上的typedef,我在这里对它们进行了解释):


如果您正在构建非Unicode,则使用%d的sprintf将按照此处其他人的说明执行您想要的操作。

没错,我想我在那里有个大脑屁:)。不管是谁,我仍然不知道一个字符*是否可以被铸造成LPSTR。对,我想我在那里放了个脑屁:)。不管是谁,我仍然不知道一个字符*是否可以被铸造成LPSTR。他说,所以你想要
\u tsprintf
@BenVoigt谢谢,你是对的。问题的标题是LPSTR,但代码片段本身是LPTSTR他说的是
LPTSTR
,所以你想要
\u tsprintf
@BenVoigt谢谢,你说得对。问题的标题是LPSTR,但代码片段本身说LPTSTRIs它是在您的代码行中的LPTSTR还是在您的问题中的LPSTR?如果您想继续使用上个世纪的此功能,请保持一致。使用LPTSTR、TCHAR缓冲区[]、_T(“文字”)和_stprintf()。没什么好说的了,上一次运行非Unicode版本的Windows上的软盘驱动器上周死了。它是您的代码行中的LPTSTR还是您的问题中的LPSTR?如果您想继续使用上个世纪的此功能,请保持一致。使用LPTSTR、TCHAR缓冲区[]、_T(“文字”)和_stprintf()。没什么好说的了,上一次运行非Unicode版本的Windows上的软盘驱动器上周死掉了。