gpt4 book ai didi

c - 将数据存储在数组中并循环,1个元素为空

转载 作者:行者123 更新时间:2023-11-30 15:47:48 26 4
gpt4 key购买 nike

我是 C 语言新手,正在从事 C 项目。我在文件顶部定义了一个结构,因此文件中的所有内容都可以使用它。我的结构定义如下:

typedef struct NumberLookupStruct
{
char * phoneNumber;
char * displayName;
} numberLookupStruct;

struct numberLookupStruct *numberLookup = NULL;

在函数的开头附近,我 malloc 结构,然后调用传递该结构的函数以加载带有数据的结构,如下所示:

numberLookup = malloc(totalLookupNumberCount * sizeof(numberLookup));
if (numberLookup == NULL) return 1;

int result = loadArray(HandleDB, resultReport, rowReport, &numberLookup);
if (result) return 1;

加载数组函数的代码如下:

int loadArray(MYSQL *HandleDB, MYSQL_RES *resultReport, MYSQL_ROW rowReport, numberLookupStruct *numberLookup)
{
int sqlLen = 0;
char *sql;

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

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

resultReport = mysql_use_result(HandleDB);

int i = 0;
printf("***LOADING ARRAY***\n\n");
while ((rowReport = mysql_fetch_row(resultReport)))
{
numberLookup[i].phoneNumber = strdup((rowReport[0] != NULL && rowReport[0][0] != '\0') ? rowReport[0] : "");
numberLookup[i].displayName = strdup((rowReport[1] != NULL && rowReport[1][0] != '\0') ? rowReport[1] : "");

printf("Stored phone number%s in %i: with Display Name: %s\n",
numberLookup[i].phoneNumber, i, numberLookup[i].displayName);
i++;
}
printf("***FINISHED LOADING ARRAY***\n\n");
mysql_free_result(resultReport);
free(sql);
return 0;
}

此时一切似乎都运行良好。当我打印出刚刚存储在结构中的内容时,电话号码和显示名称都会打印到控制台。

稍后在加载数组后的函数中,我调用执行搜索。此函数传递结构、电话号码、结构内的总行数,并应循环查找号码并返回显示名称。

但是,由于某种原因,当我循环遍历该结构时,电话号码为空,但有一个显示名称。

下面是代码。

char * performSearch(char * phoneNumber, int totalLookupNumberCount, numberLookupStruct *numberLookup)
{
//printf("***Performing search for phone number: %s***\n", phoneNumber);
int i;
for (i = 0; i < totalLookupNumberCount; i++)
{
printf("*PHONE NUMBER: %s***\n", numberLookup[i].phoneNumber);
//printf("Phone Number: %s\tDisplay Name: %s\n", numberLookup[i].phoneNumber, numberLookup[i].displayName);
//if (strcmp(numberLookupStruct[i].phoneNumber, phoneNumber) == 0)
if (strstr(phoneNumber, numberLookup[i].phoneNumber))
{
printf("***FOUND MATCH: Phone Number: %s, struct phone number: %s, display name: %s***\n",
phoneNumber, numberLookup[i].phoneNumber, numberLookup[i].displayName);
return numberLookup[i].displayName;
}
}
return phoneNumber;
}

我不明白为什么我可以成功打印加载数组函数中结构中存储的内容,但在执行搜索时,11numberLookup[i].phoneNumber11 始终为空白,但 numberLookup[ i].displayName 包含数据。

更新

LoadArray 的声明原型(prototype)如下:

int loadArray(MYSQL *HandleDB, MYSQL_RES *resultReport, MYSQL_ROW rowReport, numberLookupStruct *numberLookup);

最佳答案

您将 numberLookup 声明为指向 struct numberLookupStruct 的指针,由于 C 区分大小写,它是一个不完整类型。将该声明更改为:

numberLookupStruct* numberLookup;

您正在将 ** 传递给 loadArray 而不是指针:

int result = loadArray(HandleDB, resultReport, rowReport, &numberLookup);

更改为

int result = loadArray(HandleDB, resultReport, rowReport, numberLookup);

并弄清楚如何打开编译器的警告,以便它会在您执行此操作时告诉您。

关于c - 将数据存储在数组中并循环,1个元素为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17211930/

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