我正在尝试调整此处“数组接口示例”部分中显示的示例代码,
http://orclib.sourceforge.net/doc/html/group_g_bind.html _ _
他们在其中放置一个字符串数组tab_str
, 以OCI_BindArrayOfStrings
使用:
char tab_str[1000][21];
...
OCI_BindArrayOfStrings(st, ":s", (char*) tab_str, 20, 0);
问题是,上面的例子在编译时就知道数组长度,而我必须在程序运行时从数据库中下载这个长度。所以我想创建一个字符串数组,调用my_tab_str
并将它放在下面的代码行中:
OCI_BindArrayOfStrings(st, ":s", (char*) my_tab_str, 20, 0);
我的问题是如何设置my_tab_str
?这是我的代码(使用编译gcc -std=C89
):
int i, arraysize;
char person_name[20] = "";
char * my_tab_str;
...
strncpy(person_name, "John Smith", 19);
arraysize = <this value is downloaded from database>;
...
my_tab_str = malloc( arraysize * sizeof(char) * (strlen(person_name)+1) );
for(i=0;i<arraysize;i++) {
strncpy( my_tab_str[i], person_name, strlen(person_name) );
}
目标是将“John Smith”(例如 10 个字节)加上一个空终止字符(我认为它是由编译器自动添加的)到 strings 数组的每个元素中my_tab_str
。
我收到编译警告:warning: passing argument 1 of 'strncpy' makes pointer from integer without a cast
/usr/include/string.h:131: note: expected 'char * __restrict__' but argument is of type 'char'
请注意,OCI_BindArrayOfStrings
此处描述了该功能:
http://orclib.sourceforge.net/doc/html/group_g_bind.html#ga502cd4785691b17955f5d99276e48884 _ _
并期望一个字符串数组作为参数。有关示例实现,请参阅上面第一个链接中的示例代码。