【发布时间】:2020-01-12 06:49:16
【问题描述】:
我正在尝试使用来自 python 脚本的 C 函数。该函数返回一个数组char*。
函数如下:
char* getData(char* id) {
char* old_place = malloc(sizeof(char) * 256);
if (modifyArr(id,old_place) == 0) {
return old_place;
}
return NULL;
}
在 Python 中我有:
old = Data.getData(id)
我收到以下错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte
那是因为 old_place 没有使用它的所有 256 字符,然后我有垃圾值通过了。如何只返回非垃圾值?
编辑:关于字符串终止符('\0'),在modifyArr我改成old_place这样:
sscanf(line," %s ",old_place);
我读取了文件的行并将所需的行插入old_place,因此我不确定如何添加字符串终止符。
【问题讨论】:
-
您在使用字符串吗?你还记得添加字符串终止符吗?
-
@Someprogrammerdude 感谢您提到的“字符串终止符”。请看我的编辑。
-
modifyArr是做什么的?你不是还有内存泄漏吗? -
@MFisherKDX 在 Data.i 文件中,我使用
%newobject getData,所以我认为我没有。modifyArr只是从文件中获取所需的行并插入到该数组中。 -
如果你的函数返回NULL,你如何释放分配的值
old_place?