gpt4 book ai didi

C:如何向 Judy Hash 插入字符串以及从 Judy Hash 读取字符串

转载 作者:行者123 更新时间:2023-11-30 16:42:01 24 4
gpt4 key购买 nike

我已经四处寻找了一段时间以获得答案,但我仍然很不清楚我应该做什么。

在所有官方示例中,所有值、索引以及指向它们的指针都是 Word_t 或 PWord_t 类型,据我所知,这只是某种 int 类型。我的困惑是试图理解 this 如何引用 char* 或缓冲区 (char[]) 或原始字符串 (“string”)

这是我尝试过的,但输出难以理解(就像打印二进制文件时看到的那样)

#include <stdio.h>
#include <Judy.h>


int main()
{

Pvoid_t PJArray = (PWord_t)NULL; // Judy array.
PWord_t PValue; // Judy array element.
Word_t Bytes; // size of JudySL array.

JSLI(PValue, PJArray, "WHAT");
*PValue = "HELLO...";

JSLG(PValue, PJArray, "WHAT");
printf("%s\n", &PValue);

return 0;
}

输出为:

`(@��

最佳答案

我通过我的工具运行了您的代码,它显示代码存在缓冲区溢出问题。这是错误消息:

DTS_MSG: Stensal DTS detected a runtime program error. Abort execution!
DTS_MSG: Reading 1 bytes at 0xbfffdba0 violates type safety.
DTS_MSG: Diagnostic information:

- The object to-be-read (start:0xbfffdb9c, size:4 bytes) is allocated at
- file:/tmp/a.c::9, 19
- 0xbfffdb9c 0xbfffdb9f
- +------------------------+
- | the object to-be-read |......
- +------------------------+
- ^~~~~~~~~~
- the read starts at 0xbfffdba0 that is right after the object end.
- Stack trace (most recent call first):
-[1] file:/src/string/memchr.c::25, 9
-[2] file:/src/stdio/vfprintf.c::602, 8
-[3] file:/src/stdio/vfprintf.c::678, 8
-[4] file:/src/stdio/printf.c::9, 8
-[5] file:/tmp/a.c::16, 9
-[6] file:/src/env/__libc_start_main.c::149, 11

基本上,&PValue 获取 Pvalue 的地址,而 printf 将其视为 4 字节 JudySL 数组的地址。如果你改变

 printf("%s\n", &PValue);

 printf("%s\n", PValue);

它会为我打印出“P{WHAT”。我对 Judy hash 不熟悉,所以你需要验证它是否是预期的结果。

关于C:如何向 Judy Hash 插入字符串以及从 Judy Hash 读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46064893/

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