将MySQL行结果获取到动态数组

将MySQL行结果获取到动态数组,mysql,c,Mysql,C,从my db fetch_rowresult检索信息时 我想从这些结果中选择并将它们存储在动态数组中 第[i]行将是所需的信息 我需要将它存储到tagid[trigger] 但是char*可以存储到char 所以我现在是tagid[trigger]=*行[i] 但是当我检查结果时。。。这不是我想要的 号码358713020035990需要在tagid中 row[i] 0x05df2090 "358713020035990" char * tagid[i] -112 '' char

从my db fetch_rowresult检索信息时 我想从这些结果中选择并将它们存储在动态数组中 第[i]行将是所需的信息

我需要将它存储到tagid[trigger]

但是char*可以存储到char

所以我现在是tagid[trigger]=*行[i]

但是当我检查结果时。。。这不是我想要的 号码358713020035990需要在tagid中

row[i]  0x05df2090 "358713020035990"    char *

tagid[i]    -112 '' char
我怎样才能做到这一点

char *tagid;int trigger;
tagid = (char *) malloc(sizeof(char));
result = mysql_store_result(conn); // only one column of integers
num_rows = mysql_num_rows(result);
while (row = mysql_fetch_row(result))
{tagid[trigger] = *row[i];}

如果您试图复制字符串数据缓冲区,而不仅仅是指向该缓冲区的指针,那么您将不得不使用内存复制操作,或者最好使用标准库函数,用于strcpy或strncpy等目的。因此,假设tagid[trigger]引用的内存块是char类型的数组,您可以执行以下操作:

#include <string.h>

//tagid is a two-dimensional array of chars of ROWSIZE x COLUMNSIZE
char** tagid;
tagid = malloc(sizeof(char*) * COLUMNSIZE);
for (int i=0; i < COLUMNSIZE; i++)
{
    tagid[i] = malloc(sizeof(char) * ROWSIZE);
}

//copy some data into your array at row index "trigger"
int trigger = SOMEVALUE;
strncpy(tagid[trigger], row[i], ROWSIZE);

//free the memory you've allocated for your two dimensional array
for (int i=0; i < COLUMNSIZE; i++)
{
    free(tagid[i]);
}
free(tagid);

ROWSIZE的值必须足够大,以容纳最大的字符串加上一个终止的NULL,否则副本将使用strncpy截断,或者数据将溢出数组边界,并将写入其他您不希望的内容(如果使用strcpy)。

好的,我看到您添加了一些额外的代码,所以我更新了我的答案。请注意,我是如何将数组分配为二维数组的,以及完成后如何释放分配的内存。这和你做的有点不同。