gpt4 book ai didi

掀裙 : garbage at end of string 的 Python 扩展

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:17 28 4
gpt4 key购买 nike

我一直在尝试为 Upskirt 做一个 Python 扩展.我认为对于第一个 C 项目来说不太因为有示例(Upskirt 代码和 Ruby 扩展中的示例程序)。

扩展有效,它转换了我扔给它的 Markdown,但有时输出的字符串末尾有一些垃圾。我不知道是什么原因造成的。

这是一些输出:

python test.py 
<module 'pantyshot' from '/home/frank/Code/pantyshot/virtenv/lib/python2.7/site-packages/pantyshot.so'>
<built-in function render>

'<p>This <strong>is</strong> <em>a</em> <code>test</code>. <a href="http://example.com">Test</a>.</p>\n\x7f'
<p>This <strong>is</strong> <em>a</em> <code>test</code>. <a href="http://example.com">Test</a>.</p>

--------------------------------------------------------------------------------

'<p>This <strong>is</strong> <em>a</em> <code>test</code>. <a href="http://example.com">Test</a>.</p>\n\x7f'
<p>This <strong>is</strong> <em>a</em> <code>test</code>. <a href="http://example.com">Test</a>.</p>

--------------------------------------------------------------------------------

我的代码可以在 my Github repo 中找到.我称之为 pantyshot,因为当我听到 upskirt 时我就想到了这个。奇怪的名字,我知道。

我希望有人能帮助我。

最佳答案

你正在做一个 strdup in pantyshot_render :

output_text = strdup(ob->data); /* ob is a "struct buf *" */

但我不认为 ob->data 是一个以 nul 结尾的 C 字符串。你会在里面找到这个 upskirt/buffer.c :

/* bufnullterm • NUL-termination of the string array (making a C-string) */
void
bufnullterm(struct buf *buf) {
if (!buf || !buf->unit) return;
if (buf->size < buf->asize && buf->data[buf->size] == 0) return;
if (bufgrow(buf, buf->size + 1))
buf->data[buf->size] = 0; }

因此,您可能会跑完缓冲区的末尾并幸运地在造成任何损坏之前击中 '\0'。我认为您应该在将 ob->data 复制为 C 字符串之前调用 bufnullterm(ob);或者你可以看看 ob->size ,使用 mallocstrncpy 复制它,并手动处理 nul 终止符(但确保分配 ob->size + 1 bytes for your copyed string).

如果您想去掉换行符(即尾随的 \n),那么您可能需要在某处手动去除一些空格。

关于掀裙 : garbage at end of string 的 Python 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5835302/

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