gpt4 book ai didi

c - 自定义 Sqlite 函数在 32 位和 64 位系统上的行为不同

转载 作者:行者123 更新时间:2023-11-30 17:38:40 27 4
gpt4 key购买 nike

我正在使用自定义Metaphone项目中的Sqlite函数。这是该函数的链接:

https://github.com/geocommons/geocoder/blob/master/src/libsqlite3_geocoder/metaphon.c

当我在 32 位 Ubuntu 上运行该函数时,执行如下操作:

$ sqlite3
SQLite version 3.7.17 2013-05-20 00:56:22
sqlite> .load ./libsqlite3_geocoder.so
sqlite> select metaphone('hitchcock');
XKK

如您所见,函数返回无效结果(正确结果为HXKK)。在 64 位 Ubuntu 上,不会出现此错误。

奇怪的是,如果我将此函数编译为独立的 C 程序(删除所有 Sqlite 内容),它在 32 位操作系统上也可以正常工作。

有什么想法可能是什么原因以及如何解决它吗?

注意:如果您想自己尝试一下,只需获取 code从 Github 上,在 src/libsqlite3_geocoder 目录中运行 make 并构建 .so。不过,您需要 sqlite3 开发库来编译它。

最佳答案

找到了。 Metaphone() 函数中存在一个错误,它在某一时刻检查给定字符串边界之外的字符,这显然在不同情况下返回不同的值(不确定这是否与操作系统是否相关) 32 位或 64 位):

case 'H':
if (!varson(*(n - 1)) && (!vowel(*(n - 1)) || // see that "n - 1" here!
vowel(*(n + 1))))
{
*Metaph++ = 'H';
}
break;

关于c - 自定义 Sqlite 函数在 32 位和 64 位系统上的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22067720/

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