在尝试从我的MySQL数据库中获取一行并将输出保存到字符串数组失败数小时之后,我终于决定来这里寻求帮助,因为我显然无法自己解决它。这不是功课,我只是想写一个简单的命令行mysql-client,可以集成到其他C项目中。因为我没有从DB中提取整数,所以我无法使用atoi :(
我的问题是我无法使用sprintf()
将row[0]
的值写入field_array[i]
,因为与我的想法不同,row[]
不是每次调用mysql_fetch row()
时递增。实际上,在调用此命令时,row[0]
仅使用MYSQL_RES *struct.current_row
的内容进行更新,在本例中为MYSQL_RES *headers.current_row
。因此问题是,我希望能够正常调用mysql_fetch_row()
,同时增加int i
的{{1}},以便能够成功field_array[i]
所有值。
下面,相关代码。如果遗漏了什么,请告诉我:))
使用过的变量:
sprintf()
我无法按预期工作的部分代码:
MYSQL_ROW row;
MYSQL_RES *headers;
char field_array[50][100];
请尽可能帮助我。我正在使用Connector / C MySQL API,使用mingw32 / GCC(Code :: Blocks)在Windows 7 x64环境中工作。
我的目的是将所有值都写入while ((row = mysql_fetch_row(headers)))
{
for(int i = 0; i < num_fields; i++)
{
printf("%s\n", row[i] ? row[i] : "NULL");
sprintf(&field_array[i], "%s", row[i]);
}
}
以便以后使用它们。
答案 0 :(得分:1)
好的,我自己解决了。关键是在while()循环中使用数组增量而不是for()循环。
现在我获取所有行值并将它们写入我的field_array,然后可以在函数的其余部分中使用它。
对于遇到相同问题并找到此主题的每个人,这是您的答案!
while ((row = mysql_fetch_row(headers)))
{
for(int i_row = 0; i_row < num_fields; i_row++)
{
if (row[i_row])
{
sprintf(&field_array[i_array][0], "%s", row[i_row]);
}
else
{
printf("NULL");
}
}
i_array++;
}
为了演示正确工作的数组,我使用了
for (int i = 0; i < (*headers).row_count; i++)
{
printf("%s\n", field_array[i]);
}