我想知道这两个选项中哪一个更安全:
#define MAXLEN 255
char buff[MAXLEN + 1]
Run Code Online (Sandbox Code Playgroud)
sprintf(buff, "%.*s", MAXLEN, name)
snprintf(buff, MAXLEN, "%s", name)
我的理解是两者都是一样的.请建议.
我已经阅读了三种方法,可以从各种来源以c ++的形式将内容打印到控制台.
using namespace std;然后使用cout(CodeBlocks标准版)std::cout和std::endl;(C++ Primer)printf(HackerRank)哪个是首选,为什么?
我有一个与std::string 格式非常相似的问题,例如 sprintf或这个问题,但这些问题非常旧,所以我敢于重试以收集一些方法。
我想要一个函数/方法,它接受参数来定义带有一些变量的格式化字符串,很像printf/ sprintf。例如,它可以是一种send_string(ARGS)格式化字符串并将其发送到某个接收者的方法。例如:
server->send_message("value1: %d, value2: %0.3f, value3: %s", 2, 3.14, "hello world");
Run Code Online (Sandbox Code Playgroud)
我知道流的概念,我也知道boost::format。但我想知道没有不必要的依赖关系的最简单的方法是什么。
这是我的想法:
使用基于流的方法- 结果将如下所示:
server->msg_out() << "value1: " << 2
<< ", value2: " << 3.14
<< ", value3: '" << "hello world" << "'";
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来最合理,但它非常冗长,很难看出输出会是什么样子。特别是当您尝试实现表格输出或实际值的特殊格式时。从好的方面来说,你没有任何依赖性。
使用基于 C 的变量参数。看起来就像上面的例子,尽管它已被弃用、容易出错且不灵活,但它是众所周知的并且被大量使用。
server->send_message(boost::format(
"value1: %d, value2: %0.3f, value3: %s") % 2 % 3.14 % "hello world")); …Run Code Online (Sandbox Code Playgroud)