gpt4 book ai didi

c++ - 将 Nullpointer 传递给 fwrite 会导致问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:58 24 4
gpt4 key购买 nike

我最近写了一些代码,在某些情况下,空指针可能会传递给 fwrite

虽然它可以在 Windows 上运行,但我想知道它是否会在其他平台上引起问题,或者是否有什么可以阻止它。


我是怎么弄得这么乱的 ;) :

std::vector<unsigned char> bytes;

// ...
// bytes could be filled but may be empty.

const char* bytesToWrite = (const char*) bytes.data(); // .data() will return NULL if empty
unsigned long count = bytes.size();

if (count == fwrite(bytesToWrite, 1, count, handle)) //...

最佳答案

来自微软documentation :

fwrite returns the number of full items actually written, which may be less than count if an error occurs. Also, if an error occurs, the file-position indicator cannot be determined. If either stream or buffer is a null pointer, or if an odd number of bytes to be written is specified in Unicode mode, the function invokes the invalid parameter handler, as described in Parameter Validation. If execution is allowed to continue, this function sets errno to EINVAL and returns 0.

所以它在 Windows 中工作(好吧,你得到一个明确的错误而不是一个响亮的崩溃,但它仍然不是很有用)。但是在 Unix/Linux 中没有这种情况的踪迹,所以不要依赖它。总是事先测试:

if (buffer != NULL) { fwrite(buffer, ...

或使用 assert(buffer != NULL) 将未定义的行为转换为已定义的行为

关于c++ - 将 Nullpointer 传递给 fwrite 会导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46662837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com