【发布时间】:2018-07-21 16:35:15
【问题描述】:
我有一个 std::string 对象。上下文应该被传递给一个日志函数,该函数接受类似于printf 格式样式的参数。但是参数的存储是有限制的。参数只能使用几个字节。
字符串是从文件中读取的,除了它只包含可读字符之外,我无法做出任何假设。该函数将解释字符串并特别注意“%”字符。但由于这不是真正的格式字符串,我需要转义百分比字符。
编辑: log 函数在参数和能力大小上是有限的,所以不可能使用"%s" 作为格式字符串和字符串作为参数。因此我需要转换字符串。所以log("%s", foo.c_str())是不可能的。
如何复制std::string 中的所有百分号?
std::string foo = "got 7%\n";
foo 转义后应该是“got 7%%\n”。
【问题讨论】:
-
有什么可以投反对票的 cmet 吗?
-
您根本不需要转义字符串,因为您不应该将它作为格式字符串传递给开头。使用单独的格式字符串
"%s",并将该字符串作为参数传入,例如:log("%s", foo.c_str())或log("%.*s", foo.size(), foo.c_str()) -
getline() 函数不对它读取的字符执行任何处理,因此您不必转义任何内容。但你的问题还很不清楚。
-
@NeilButterworth 正如您在问题中可能已经读到的内容来自外部来源。所以你不应该假设读取功能,例如
getline将负责内容。 -
@RemyLebeau 特殊的日志功能是有限的,可以和
"%s"一起使用。