fd, buf, sizeof(buf)); 上面的代码是一个大型项目的-6ren">
gpt4 book ai didi

c - 如何计算 write() 使用了多少缓冲区(大小)?

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:11 25 4
gpt4 key购买 nike

char buf[256];
sprintf(buf, "It was %s\r\n", weather);
write(p->fd, buf, sizeof(buf));

上面的代码是一个大型项目的片段。

buf 用于存放多个不同长度的字符串。我怎么知道写函数要放什么? sizeof() 只是给出 256 我相信,因为 write 只会吐出一堆额外的垃圾字符。

最佳答案

使用 len 的代码版本应该是:

char buf[256];
int len = snprintf(buf, sizeof buf, "It was %s\r\n", weather);

if ( len < 0 || len >= sizeof buf )
// error handling, abort...

write(p->fd, buf, len);

使用 sprintf 是有风险的,因为如果 weather 不完全在您的控制之下,它可能会导致缓冲区溢出。

如其文档中所述,如果出现错误,sprintf 系列可以返回负值;如果写入不适合缓冲区,则返回值可能大于缓冲区大小。

其他答案涵盖的另一个选项是省略检查 len,而是使用 strlen 来查找要发送的长度。有些人会认为这是不必要的低效。此外,在那种情况下,无论如何你都应该检查 len 以防 encoding fails这将导致 strlen 对垃圾进行操作。

关于c - 如何计算 write() 使用了多少缓冲区(大小)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29338782/

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