ISO C委员会(ISO/IEC JTC1/SC21/WG14)已发布TR 24731-1,正在研究TR 24731-2:
TR 24731-1:C库的扩展第一部分:边界检查接口
WG14正在研究更安全的C库函数.该TR旨在通过添加具有缓冲区长度的额外参数来修改现有程序.最新草案见N1225号文件.理由是在N1173号文件中.这将成为技术报告类型2.
TR 24731-2:C库的扩展 - 第二部分:动态分配功能
WG14正在研究更安全的C库函数.该TR面向使用动态分配而不是缓冲区长度的额外参数的新程序.最新草案见N1337号文件.这将成为技术报告类型2.
作为一种学习经历,我将一些东西从Windows移植到MacOS,并遇到这样的事情:
void SomeClass::someFunction(const char* format, va_list args)
{
int size = _vscprintf(format, args); // length after formatting
std::string s;
s.resize(size);
vsprintf(&s[0]);
...
}
Run Code Online (Sandbox Code Playgroud)
现在,因为_vscprintf是微软特有的,我在Linux上没有发现任何类似的东西,我想我会问这里.
我们还假设此代码位于某个关键路径中,并且不应该有一些额外的堆分配开销等.
在MacOS/Linux上推荐的_vscprintf替代品是什么?
谢谢!