Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql c语言中2D数组的奇怪问题_Mysql_C_Multidimensional Array - Fatal编程技术网

Mysql c语言中2D数组的奇怪问题

Mysql c语言中2D数组的奇怪问题,mysql,c,multidimensional-array,Mysql,C,Multidimensional Array,我目前正在从事一个C项目,在使用2D数组时遇到了一个问题。在我开始之前,我对C非常陌生,所以如果这是一个直截了当的问题,请原谅我 我试图做的是初始化一个数组,并将其传递给一个函数以检索结果。一旦完成,原始函数就可以在数组中循环 该数组包含50行2个元素 下面是我初始化数组和调用函数的方法 char* array[][2] = {0}; int result = loadArray(&HandleDB, &array); 下面是loadArray的函数 int loadA

我目前正在从事一个C项目,在使用2D数组时遇到了一个问题。在我开始之前,我对C非常陌生,所以如果这是一个直截了当的问题,请原谅我

我试图做的是初始化一个数组,并将其传递给一个函数以检索结果。一旦完成,原始函数就可以在数组中循环

该数组包含50行2个元素

下面是我初始化数组和调用函数的方法

char* array[][2] = {0};
    int result = loadArray(&HandleDB, &array);
下面是loadArray的函数

int loadArray(MYSQL *HandleDB, char *array[][2])
{
    int sqlLen = 0;
    char *sql;
    MYSQL_RES *resultReport;
    MYSQL_ROW rowReport;

    sqlLen = asprintf(&sql, "SELECT * FROM TblLookups");

    SL_DebugAll(DBG_ALWAYS, sql);
    if ((mysql_real_query(HandleDB, sql, sqlLen)))
    {
        printf("MySQL Error: %s\n", mysql_error(HandleDB));
        return 1;
    }

    resultReport = mysql_use_result(HandleDB);

    int i = 0;
    while ((rowReport = mysql_fetch_row(resultReport)))
    {

        array[i][0] = rowReport[0];
        array[i][1] = rowReport[1];
        printf("%s:%s\n", array[i][0], array[i][1]);
        i++;
    }
    printf("***\n\n");

    for (i = 0; i < 50; i++)
    {
        printf("%s:%s\n", array[i][0], array[i][1]);
    }
    return 0;
}
当我在for循环中循环相同的数组时,我得到以下结果

:colB1
:colA1
:colB2
:colA3
:colB3
:colA2
我不明白为什么当printf语句是访问同一数组的同一代码时,它不在for循环中工作,而在while循环中工作


谢谢你能提供的帮助

迭代多维数组的代码很好。但是,您正在数组中存储字符指针
(char*)
。这意味着您实际上并没有存储结果字符串本身,而是存储它们时它们在内存中的位置。但是,每次调用
MySQL\u fetch\u row(resultReport)
时,MySQL都会在内部更改该位置,因此您的字符指针最终指向不同的或无效的数据

存储结果的正确方法是创建字符串的副本,并使数组元素指向副本。一种方法是

while ((rowReport = mysql_fetch_row(resultReport)))
{

    array[i][0] = strdup(rowReport[0]);
    array[i][1] = strdup(rowReport[1]);
    printf("%s:%s\n", array[i][0], array[i][1]);
    i++;
}

char*数组[][2]={0}
不使用gcc为我编译,而是使用MSVC生成1x2数组。你说数组有50行-你在哪里扩展
array
来为这些行提供存储?回答得不错。但我有点困惑。结果集在整个函数中都是常量,
mysql\u fetch\u row
将从结果集中检索行,那么如果
mysql\u fetch\u row
仅从结果集中检索行,为什么行的位置会改变?(如果我错了,请纠正我)MySQL可能会在检索结果集后回收该结果集,因为一旦您调用
MySQL\u fetch\u row
我不相信有其他方法可以再次从MySQL获取该行。感谢您的帮助,修复了它,我忘记了char*如何工作和指针。
while ((rowReport = mysql_fetch_row(resultReport)))
{

    array[i][0] = strdup(rowReport[0]);
    array[i][1] = strdup(rowReport[1]);
    printf("%s:%s\n", array[i][0], array[i][1]);
    i++;
}