gpt4 book ai didi

mysql - C Realloc 追加字符串 MySQL 连接器

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:40 25 4
gpt4 key购买 nike

我试图遍历每个数据库结果,并在最后一个字符串中用逗号分隔每行的单个字段。我知道这可以单独在 MySQL 中完成,但我需要在每个结果上运行函数,所以这对于 mysql only 方法是不可能的。

每隔几次运行,我就会遇到段错误,不需要的字符会添加到输出中,例如 Linux 中的“^H^G”或十六进制代码(08 和 07)。它编译正确,我只希望我能得到一致的结果。此代码在线程内,但所有变量都是当前线程的本地变量。

最终字符串应该是用户字符串字符。

这是我尝试使用的最新代码。

MYSQL dbh;
MYSQL *dbh_p;
MYSQL_RES *res;
MYSQL_ROW row;
char *userstring = NULL;
char *userstring_r;
size_t userstringsize = 0;
size_t rowsize = 0;

/* Database Connect Code Here [Connects Successfully] */

if(mysql_query(dbh_p,query) == 0) {
res = mysql_store_result(dbh_p);
if(mysql_num_rows(res) > 0) {
while((row = mysql_fetch_row(res))) {
rowsize = strlen(row[0]) * sizeof(char);
userstringsize += rowsize + 1;
userstring_r = (char *) realloc(userstring,userstringsize + 1);

printf("%d %d %p\n", rowsize, userstringsize, userstring_r);
if(userstring_r != NULL) {
/* Where the Issue Is */
userstring = userstring_r;
strcat(userstring,row[0]);
strcat(userstring,",");
}else{
free(userstring);
printf("Error With Realloc\n");
mysql_thread_end();
pthread_exit(NULL);
}
}
}
mysql_free_result(res);
}else{
printf("Query Error: %s\n",mysql_error(&dbh));
}

-- 编辑--输出:

9 10 0x7fe5f4014d90
14 25 0x7fe5f4014d90
9 35 0x7fe5f4014d90
11 47 0x7fe5f4014d90
... (same format and pointer value);
*** glibc detected *** ./pthread: realloc(): invalid next size: 0x00007fe5f4014d90 ***

即使我将线程限制为仅 1 个,这也是结果。

感谢您提供的任何帮助或可能出现的问题。我不需要完整的代码,只需要提示/提示和可能的修复。我已经尝试过 strncat、memcpy 和更改各种大小,但没有任何运气。

最佳答案

好吧,我想我知道出了什么问题:

第一次分配 userstring 时,它没有被初始化为一个空字符串!基本上 strcat 一直将新数据放在它找到第一个 \0 字节的任何地方,它可以是任何地方。

您需要以某种方式检查它是否是第一次,并对其进行初始化。像这样的东西:

if (userstringsize == 0)  // First time
{
userstringsize += rowsize + 1;
userstring_r = (char *) malloc(userstringsize + 1);
strcpy(userstring_r, ""); // Initialise to empty string
}
else
{
userstringsize += rowsize + 1;
userstring_r = (char *) realloc(userstring,userstringsize + 1);
}

关于mysql - C Realloc 追加字符串 MySQL 连接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13592300/

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