格式字符串问题不正确的格式说明
我的字符串的样子:格式字符串问题不正确的格式说明
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)
的值可以是字符串或整数。 请建议。
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
数据类型。
如果您需要使用%1和%2,请考虑使用FormatMessageCString成员来代替。而且,如前所述,如果您想要%字符,请使用%%。
但是使用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来代替。
您链接到MFC CString类的Visual Studio 6版本。当前的ATL/MFC文档可以在[CStringT :: FormatMessage](https://msdn.microsoft.com/en-us/library/041zd9kb.aspx)上找到。 – IInspectable
@IInspectable谢谢。我试图找到一个新的网页。我应该修改我的答案以使用更新的链接? –
我建议你链接到当前的文档。您的答案中的链接实际上只是指Visual Studio 6附带的MFC CString实现(可能不再适用)。另外,该页面上其他信息的所有链接现在都已经死亡。 – IInspectable
我需要使用%和额外%的转义字符串根据需要为%s和%d工作。非常感谢。 –