我试图遍历每个数据库结果,并在最后一个字符串中用逗号分隔每行的单个字段。我知道这可以单独在 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 和更改各种大小,但没有任何运气。