My String看起来像:
std::wstring replacePattern = L";FOLD PTP %1 Vel=100 % PDAT%2";
我期待把价值放在上面:
CString replaceString;
replaceString.Format(replacePattern.c_str(), posData.m_posName, posData.m_posName)
运行时间:错误:
Expression: ("Incorrect format specifier", 0)
值可以是字符串或整数。 请建议。
答案 0 :(得分:5)
如果您需要使用%1和%2,请考虑使用FormatMessage CString 成员。并且,如上所述,如果你想要一个%字符,请使用%%。
但是使用 FormatMessage ,你可以做你想做的事。
所以它会是这样的:
std::wstring replacePattern = L";FOLD PTP %1% Vel=100 %% PDAT%2!d!";
CString replaceString;
replaceString.FormatMessage(replacePattern.c_str(), posData.m_posName, posData.m_posName)
如果您想使用类似整数的东西:
%1!d!
只需更改数字即可指示您正在使用的变量。
如果您想使用类似CString的内容:
%1%
上面的帮助主题提供了更多详细信息。因此,虽然您可以修改格式字符串以便 CString :: Format 起作用,但它会确定您的值的顺序。但是,如果由于本地化,您需要具有不同顺序的值,请考虑使用 CString :: FormatMessage 。
答案 1 :(得分:3)
MFC / ATL的CStringT::Format不支持位置格式说明符,因此%1
,%2
等不是合法类型字段。您必须使用%d
(对于整数)或%s
作为字符串。如果您需要在格式字符串中使用百分号,则需要使用%%
转义它(请参阅printf Type Field Characters)。
您的模式应该是
std::wstring replacePattern = L";FOLD PTP %d Vel=100 %% PDAT%d";
或
std::wstring replacePattern = L";FOLD PTP %s Vel=100 %% PDAT%s";
取决于posData.m_posName
的数据类型。