各データベースの結果をループしようとしていますが、各行のコンマから1つのフィールドを最後の文字列で区切ります。これはMySQLだけで実行できることは承知していますが、mysqlのみの方法では実行できないように、各結果に対して関数を実行する必要があります。
数回実行するたびに、セグメンテーション違反が発生します。Linux内の「^ H ^ G」や16進コード(08および07)などの不要な文字が出力に追加されます。正しくコンパイルされます。一貫した結果が得られればいいのですが。このコードはスレッド内にありますが、すべての変数は現在のスレッドに対してローカルです。
FinalStringはuserstringcharである必要があります。
これは私が使用しようとした最新のコードです。
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を試し、運が悪かったのでさまざまなサイズを変更しました。