我正在将多维char数组传递给我的MySQL函数。 cmd包含命令,resultSet [2] [50]是我的数组。
如何让它更具动态性,以便我能够检索到我想要的任意数量的项目?
int
selectDB(char * cmd, char resultSet[2][50])
{
MYSQL *conn;
MYSQL_RES *result;
MYSQL_ROW row;
int i;
char *c1;
conn = mysql_init(NULL);
if (conn == NULL) {
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
if (mysql_real_connect(conn, "localhost", "root",
"mypassword", "myDBName", 0, NULL, 0) == NULL)
{
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
if (mysql_query(conn, cmd))
{
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
if (!(result = mysql_store_result(conn)))
{
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
while((row = mysql_fetch_row(result))) {
for (i=0 ; i < mysql_num_fields(result); i++)
{
snprintf(resultSet[i], 999, "%s", row[i]);
}
}
if (!mysql_eof(result))
{
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
mysql_free_result(result);
mysql_close(conn);
return 0;
}
答案 0 :(得分:1)
你可以接受一个三指针作为这样的参数和int
,它将告诉数组的大小
int selectDB( char* cmd, char*** resultSet, int* m, int* n )
{
// allocate two dimentional array with any size you want, using malloc
// store the size into m and n
// do stuff with resultSet
// watch out when using snprintf - check if i is smaller
// than the size of the array. If so - just use snprintf
// otherwise, you'll need to allocate some larger memory,
// and copy "move" the current records into the new location
// then free the old memory, etc.
//
// return
}
这样你就可以知道数组的大小,但你需要处理释放内存,为resultSet
分配。