gpt4 book ai didi

mysql - c中二维数组的奇怪问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:56:05 24 4
gpt4 key购买 nike

我目前正在做一个 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;
}

现在我遇到的问题是在 while 循环错误之后打印出数组的内容,但在 while 循环内是正确的。

例如,在 while 循环中,它从 MySQL 结果中获取值,然后打印它存储在数组中的内容,我得到以下输出:

colA1:colB1
colA2:colB2
colA3:colB3

然后当我在 for 循环中遍历相同的数组时,我得到以下内容

:colB1
:colA1
:colB2
:colA3
:colB3
:colA2

我不明白为什么当 printf 语句是访问同一数组的相同代码时,这在 for 循环中不起作用,但在 while 循环中起作用。

感谢您提供的任何帮助。

最佳答案

迭代多维数组的代码没问题。但是,您将字符指针 (char *) 存储在数组中。这意味着您实际上并不是在存储结果字符串本身,而是在存储它们时它们在内存中的位置。但是,每次您调用 mysql_fetch_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++;
}

关于mysql - c中二维数组的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17150329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com