gpt4 book ai didi

c++ - 调用地址为空 std::vector 的 C 函数

转载 作者:行者123 更新时间:2023-11-30 00:56:19 26 4
gpt4 key购买 nike

如果我有一个 std::vector 缓冲区,它有 100 个字符的空间,我调用一个 C 函数,它将写入一个以 NULL 结尾的字符串,如 writestring(&buffer[0], buffer.size()) 从我读过的内容来看,如果缓冲区中已经有数据,那没关系。但如果 vector 为空,则行为未定义。我该如何解决这个问题,我可以向缓冲区写入一些内容,例如“qwerty”,然后调用 writestring() 以便我知道行为始终已定义吗?你们在调用C函数时使用什么样的存储?我刚刚读到有关 .data 的信息,但我不知道它有多普遍或可移植。

谢谢

最佳答案

C++

std::vector<char> v;
v.resize(100);
writestring(&v[0], v.size());

C

void writestring(char*p, size_t len) {
strncpy(p, "Doofi", len);
}

if the vector is empty the behavior is undefined. How do I get around that?

通过传递一个非空缓冲区。使用 .resize()快速填充 vector 的方法,或将其构造为最初大小合适的方法:std::vector<int> v(100); .

What kind of storage do you guys use when calling C functions?

std::vector是此应用程序的不错选择。对于 C,它看起来就像一个数组或一个 malloc 区域。但是,要意识到 C 的指针只有在 vector 既没有被重新分配也没有被销毁的情况下才有效。

关于c++ - 调用地址为空 std::vector 的 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10505712/

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