【问题标题】:Escape "%" symbol when calling CString::FormatV调用 CString::FormatV 时转义 "%" 符号
【发布时间】:2014-12-08 14:47:58
【问题描述】:

我在文件 i/o 函数中使用 var args。除非要输出的字符串包含 % 并且没有其他参数,否则它工作正常。例如。例如,字符串<name px=100% /> 会导致问题。代码大致如下:

void OutV(CString s, va_list args)
{
    CString formatted;
    formatted.FormatV(str, args);

    // Do stuff with formatted....
}

有没有办法让% 符号不会导致问题。理想情况下,我希望它在上面的 OutV 函数中,这样它只需要在一个地方。

我不能简单地将所有 % 替换为 %% ,因为如果那里有 %d 则仍然需要将其替换为整数。

【问题讨论】:

  • 我不能简单地将所有 % 替换为 %% ,因为如果那里有 %d 则仍然需要替换。
  • 那么你如何区分 '%d%dummyName' 中的 2 % 呢?
  • 我已经稍微修改了我的答案。

标签: c++ mfc escaping variadic-functions cstring


【解决方案1】:

确保您的文字格式字符串通过将百分号加倍来​​避开百分号:%%

您可能还想考虑使用类似的东西

OutV(CString("%s"), "<name px=100% />");

更新

我不能简单地将所有 % 替换为 %% ,因为如果那里有 %d 则仍然需要替换。

你需要更仔细地把事情拼凑起来。例如,

OutV(CString("%s%d%s"), "<name px=", 100, "% />");

【讨论】:

  • 我已经编辑了 OP:“我不能简单地将所有 % 替换为 %% ,因为如果那里有 %d 则仍然需要替换”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2014-11-26
相关资源
最近更新 更多