使用sprintf(),MySQL C API将mysql_fetch_row()输出保存到字符串数组中

时间:2015-11-18 01:51:48

标签: mysql c

在尝试从我的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]); } } 以便以后使用它们。

1 个答案:

答案 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]);
}