带有myPrint()函数的非常长的字符串将崩溃.
我认为vsnprintf()无法从linux手册页返回缓冲区长度的书面大小.
我期望的字符串是缓冲区大小的截断字符串,但从测试代码下面完全错误.
下面有什么问题?
void myPrint(const char* fmt, ...)
{
char buffer[512] = {0,};
va_list arg;
va_start(arg, fmt);
int r = vsnprintf(buffer, 511, fmt, arg); // buffer size is given
if (r > 0) // works correctly
buffer[r+1] = '\0'; // crash because r is 200,000
va_end(arg);
}
int main(int, char**)
{
const char * data = "abcdefg...." // assuming that a length is 200,000 byte string
myPrint("%s\n", data);
}
Run Code Online (Sandbox Code Playgroud) http://en.cppreference.com/w/cpp/language/rule_of_three
我几个月前开始使用c ++ 11,并且已经看过五条规则.
所以..我开始在每个具有虚析构函数的类上使用default关键字复制构造函数/复制赋值运算符/移动构造函数/移动赋值运算符.
因为规则告诉我,如果你声明显式析构函数,那么你的类就没有它的隐式移动构造函数和移动赋值运算符了.
所以我认为gcc会向我抱怨由于缺少移动构造函数和移动赋值运算符而导致下面的类.
但它运作良好!发生了什么事??
class Interface {
public:
virtual ~Interface() = default; // implicit destructor
};
class ImplA : public Interface {
public:
virtual ~ImplA() = default; // implicit destructor
};
ImplA first;
ImplA second(first); // copy constructor, OK. understood it.
ImplA third(std::move(first)); // move constructor, it's OK. Why?
second = first; // copy assignment, OK. understood it.
second = std::move(first); // move assignment, it's also OK. Why?
Run Code Online (Sandbox Code Playgroud) 我有一些分析 mp4 流的工具,例如 Mp4 Explorer、MP4 Reader 和 mp4viewer(通过 python)。他们都不能显示 avc3 有什么结构但我可以看到 avc1。所以我一直在寻找来自 ISO-ISE 14496-12、QuickTime 格式(来自苹果的文档)的 avc3 并找到 avc1 和 avcC。在搜索时,使用 demuxer 之类的东西的人留下了一条提交消息,例如“现在支持 avc3 的 mp4 框”。但这就是全部:( 我在哪里可以找到和查看参考文档?
有人知道avc3吗?