【问题标题】:KDB C++ API: creating a list of stringsKDB C++ API:创建字符串列表
【发布时间】:2017-04-28 19:32:43
【问题描述】:

我未能在 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”的地方可能是重复两次的其他随机字符串。看来,我确实创建了一个字符串列表,但无论出于何种原因,该列表都包含垃圾。你能帮我理解我在这里做错了什么吗?

感谢您的帮助!

【问题讨论】:

    标签: c++ string list api kdb


    【解决方案1】:

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

    字符串列表是一个混合类型列表,因为它是 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;
    }
    

    加载 lib 和调用 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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2016-02-13
      • 1970-01-01
      • 2011-07-28
      • 2011-04-20
      相关资源
      最近更新 更多