gpt4 book ai didi

c++ - 将 char 直接放在数组后的可靠方法

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

我正在使用以下代码从套接字中读取:

char buf[4097];
int ret = read(fd, buf, sizeof(buf) - 1);
buf[ret] = 0x0;
std::cout << buf << "\n";

但是,我不喜欢其中需要 4097sizeof(buf) - 1。就是那种很容易忘记的东西。所以我想知道,是否有一些很好的方法可以强制编译器将 0x0 直接放在数组之后的堆栈上?

我喜欢的是类似的东西

char buf[4096];
char _ = 0x0;
int ret = read(fd, buf, sizeof(buf));
buf[ret] = 0x0;
std::cout << buf << "\n";

但我不知道如何强制编译器不执行任何介于两者之间的操作(afaik #pragma pack 仅适用于结构,不适用于堆栈)。

最佳答案

我会保持简单:

ssize_t read_and_put_0(int fd, void *buf, size_t count)
{
ssize_t ret = read(fd, buf, count - 1);
if (ret != -1) // Or `if (ret <= 0)`
((char *)buf)[ret] = 0x0;
return ret;
}

// ...

char buf[4097];
read_and_put_0(fd, buf, sizeof buf);

关于c++ - 将 char 直接放在数组后的可靠方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44309919/

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