【发布时间】:2021-01-29 15:04:12
【问题描述】:
当我尝试将 16 个字符的字符串从 python 传递到 C 并对其进行加扰时,我不断收到随机错误代码。
s = ctypes.c_wchar_p("H86ETJJJJHGFTYHr")
print(libc.hash_password(s))
在代码的开头我添加了一条语句来将字符串的大小返回给python, 但是它一直返回值 8
if (sizeof(my_string) != 17) return sizeof(my_string);
如果我尝试返回数组的单个元素,它将返回一个数字,我假设这是字符的 ascii 值,并且代码不会出错。
这也适用于最后一个元素,它被正确识别为 null。
代码在 C 本身中完美运行。那么如何让 C 接受正确大小的字符串,或者让 python 接受返回字符串呢?
编辑:忘了提,当我这样做时
sizeof(*my_string)
它返回一个 1
编辑 2: 这是函数定义
unsigned char *hash_password(char *input_string)
【问题讨论】:
-
17 是字符串的长度。 char* 类型的变量在 64Bit 上的大小是 8 字节,这就是 sizeof 返回的。
-
我知道字符串的大小是 17,这就是为什么如果它不是 17,我会放置早期的 return 语句。好吧,但我不知道为什么要这样做 sizeof(*my_string)返回 1。
-
@PythonProgrammer 在 C 中编码时,你不会戴着 Python 眼镜完成它。
-
@PythonProgrammer
sizeofoperator,char,wchar_tetc -
mystring是char*,*mystring指的是指针处的 单个 char,char的大小为 1。使用strlen计算从指针开始直到找到的第一个空字节的所有字符。