c++ - KDB C++ API : creating a list of strings

标签 c++ string list api kdb

我无法在 KDB C++ API 中创建字符串列表。这就是我正在做的:

 K lst = ktn(KC,0);
 jk(&lst, kp((S)"str_1")); 
 jk(&lst, kp((S)"str_2"));
 r1(lst);
 k(h, (S)"{show type x}" , lst, (K)0);
 r1(lst);
 k(h, (S)"{show count x}", lst, (K)0);
 r1(lst);
 k(h, (S)"{show x}"      , lst, (K)0);

输出

10h
2
"\260\260"

代替“\260\260”的可能是其他一些重复两次的随机字符串。看来,我确实创建了一个字符串列表,但无论出于何种原因,该列表都包含垃圾。你能帮我理解我在这里做错了什么吗?

感谢您的帮助!

最佳答案

您正在使用 char 类型 (KC) 初始化列表,因此这将是一个字符列表,而不是字符串列表。

字符串列表是混合类型列表,因为它是 Kdb 中字符列表的列表。因此,您需要使用 0 类型(混合列表类型)初始化列表。


示例 C 代码 - strList.c:

#define KXVER 3
#include "k.h"

K createStrListStatic(K x){
  K strList = ktn(0,2);
  kK(strList)[0] = kp("hello");
  kK(strList)[1] = kp("world");
  return strList;
}

K createStrListDynamic(K x){
  K strList = ktn(0,1);
  kK(strList)[0] = kp("hello");
  js(&strList, (S)kp("world"));
  return strList;
}

加载库和调用 C 函数的示例 Q 代码 - strList.q:

createStrListStatic:`:strList 2:(`createStrListStatic;1);
createStrListDynamic:`:strList 2:(`createStrListDynamic;1);

-1 "\ncreateStrListStatic";
-1 "\t",.Q.s1 createStrListStatic[];
-1 "\ncreateStrListDynamic";
-1 "\t",.Q.s1 createStrListDynamic[];

编译运行如下:

$ gcc -shared -m32 -fPIC strList.c -o strList.so && LD_LIBRARY_PATH="." q strList.q
KDB+ 3.4 2016.10.27 Copyright (C) 1993-2016 Kx Systems
l32/ 8()core 7982MB salih glyph01 127.0.1.1 NONEXPIRE


createStrListStatic
        ("hello";"world")

createStrListDynamic
        ("hello";"world")

关于c++ - KDB C++ API : creating a list of strings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43687667/

相关文章:

string - str_split 和 strsplit 之间的行为不一致

python - 如何从Python中的对象列表中删除具有相同 'title'字段的重复项?

python - 使用字典在Python中将列表拆分为两部分

c++ - 为什么 clang 和 gcc 以不同的方式处理具有类内初始化的结构的支撑初始化?

c++ - 如何在openCV中将彩色图像转换为灰度图像?

java - 如何在 Java 中使我的 JSON 更好?严格使用 - org.json.JSON

c - 从主字符串中查找子字符串

c++ - 无法在我的 C++ 代码中执行超过 1 行

C++我在所有标题中都使用了一个函数

python - 引用元组列表中所有元组的第一个元素