擅长:python、mysql、java
<p>如果UTF-8编码的<code>char *</code>是正常的,那么您肯定应该使用<a href="https://docs.python.org/3/c-api/unicode.html#c.PyUnicode_AsUTF8AndSize" rel="nofollow noreferrer">^{<cd2>}</a>(这需要python3.3):</p>
<pre><code>PyObject * objectCompName = PySequence_GetItem(compTuple, 0);
if (! objectCompName) {
return NULL;
}
Py_ssize_t size;
char *ptr = PyUnicode_AsUTF8AndSize(objectCompName, &size);
if (!ptr) {
return NULL;
}
// notice that the string pointed to by ptr is not guaranteed to stay forever,
// and you need to copy it, perhaps by `strdup`.
</code></pre>
<p>另外,请务必了解,<strong>必须检查代码中执行的每个<code>Py*</code>函数调用的返回值。在</p>
<p>这里,<code>PyTuple_GetItem</code>将返回{<cd5>},如果<code>compTuple</code>不是<code>tuple</code>,或者{<cd8>}导致{<cd9>}。^如果<code>objectCompName</code>不是<code>str</code>对象,则{<cd2>}将返回<code>NULL</code>。忽略返回值,当条件正确时,<code>SIGSEGV</code>会导致CPython崩溃。在</p>