gpt4 book ai didi

python - 如何在没有循环的情况下在 Cython 中创建空的 char 数组

转载 作者:太空狗 更新时间:2023-10-30 01:01:02 24 4
gpt4 key购买 nike

嗯,这看起来很简单,但我在网上找不到任何引用资料。在 C 中,我们可以创建一个包含 n 个空字符的 char 数组,如下所示:

char arr[n] = "";

但是当我尝试在 Cython 中做同样的事情时

cdef char arr[n] = ""

我得到这个编译错误:

Error compiling Cython file:
------------------------------------------------------------
...
cdef char a[n] = ""
^
------------------------------------------------------------

Syntax error in C variable declaration

显然 Cython 不允许以这种方式声明数组,但是有替代方法吗?我不想手动设置数组中的每个项目,也就是说我不是在寻找这样的东西

cdef char a[10]
for i in range(0, 10, 1):
a[i] = b"\0"

最佳答案

您不必将每个元素都设置为长度为零的 C 字符串。将第一个元素置零就足够了:

cdef char arr[n]
arr[0] = 0

接下来,如果要将整个 char 数组归零,请使用 memset

from libc.string cimport memset
cdef char arr[n]
memset(arr, 0, n)

如果 C 纯粹主义者提示 0 而不是 '\0',请注意 '\0' 在 Cython 中是一个 Python 字符串(Python 3 中的 unicode)。 '\0' 不是 Cython 中的 C 字符! memset 的第二个参数需要一个整数值,而不是 Python 字符串。

如果你真的想知道 Cython 中 C '\0' 的 int 值,你必须在 C 中编写一个辅助函数:

/* zerochar.h */
static int zerochar()
{
return '\0';
}

现在:

cdef extern from "zerochar.h":
int zerochar()

cdef char arr[n]
arr[0] = zerochar()

cdef extern from "zerochar.h":
int zerochar()

from libc.string cimport memset
cdef char arr[n]
memset(arr, zerochar(), n)

关于python - 如何在没有循环的情况下在 Cython 中创建空的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30531819/

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