gpt4 book ai didi

c++ - C/C++如何知道动态分配的数组有多长

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:20:16 25 4
gpt4 key购买 nike

这个问题困扰了我一段时间。

如果我做 int* a = new int[n],例如,我只有一个指向数组 a 开头的指针,但是 C/C++ 如何知道 n?我知道如果我想将这个数组传递给另一个函数,那么我必须用它传递数组的长度,所以我猜 C/C++ 并不知道这个数组有多长。

我知道我们可以通过查找 NUL 终止符来推断字符数组 char* 的结尾。但是其他数组是否有类似的机制,比如int?同时,char 可以不仅仅是一个字符——您还可以将其视为整数类型。那么 C++ 怎么知道这个数组在哪里结束呢?

这个问题在我做嵌入式Python开发的时候就更加困扰了(如果你对嵌入式python不熟悉,可以忽略这一段,直接回答上面的问题,我还是会感激的)。在 Python 中有一个“ByteArray”,将这个“ByteArray”转换为 C/C++ 的唯一方法是使用 PyString_AsString() 将其转换为 char*。但是如果这个 ByteArray 中有 0,那么 C/C++ 会认为 char* 数组提前停止。这还不是最糟糕的部分。最糟糕的是,假设我做了一个

char* arr = PyString_AsString(something)
void* pt = calloc(1, 1000);

如果 st 恰好以 0 开头,那么 C/C++ 几乎可以保证清除 arr 中的所有内容,因为它认为 arr 在 NULL 出现后立即结束。然后它可能会通过为 pt 分配内存主干来清除 arr 中的所有内容。

非常感谢您的宝贵时间!对此,我真的非常感激。

最佳答案

C/C++ 没有; 分配器(实现malloc()free() 等的一小段代码)知道它有多长。欢迎使用 C/C++ 自身,无需担心长度的限制。

此外,PyString_AsStringAndSize() .

关于c++ - C/C++如何知道动态分配的数组有多长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268095/

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