我已经尝试了一段时间了,但似乎无法正常工作:
char** fetch (char *lat, char*lon){
char emps[10][50];
//char** array = emps;
int cnt = -1;
while (row = mysql_fetch_row(result))
{
char emp_det[3][20];
char temp_emp[50] = "";
for (int i = 0; i < 4; i++){
strcpy(emp_det[i], row[i]);
}
if ( (strncmp(emp_det[1], lat, 7) == 0) && (strncmp(emp_det[2], lon, 8) == 0) ) {
cnt++;
for (int i = 0; i < 4; i++){
strcat(temp_emp, emp_det[i]);
if(i < 3) {
strcat(temp_emp, " ");
}
}
strcpy(emps[cnt], temp_emp);
}
}
}
mysql_free_result(result);
mysql_close(connection);
return array;
是的,我知道 array = emps 被注释掉了,但如果没有注释,它告诉我指针类型不兼容。这个,以防我忘记提及,是一个 char** 类型的函数,我希望它返回 emps[10][50] 或下一个最好的东西。我该怎么做呢?谢谢!
最佳答案
T [N][M]
类型的数组表达式不会衰减到T **
- 它衰减到类型T (*)[M]
(指向 M
元素数组的指针)。
其次,您试图返回函数本地数组的地址;一旦函数退出,emps
数组不再存在,任何指向它的指针都将失效。
您可能最好将目标数组作为参数传递给函数并让函数写入它,而不是在函数内创建一个新数组并返回它。您可以动态分配数组,但是您正在进行内存管理舞蹈,避免内存管理问题的最佳方法是避免进行内存管理。
所以你的函数定义看起来像
void fetch( char *lat, char *lon, char emps[][50], size_t rows ) { ... }
你的函数调用看起来像
char my_emps[10][50];
...
fetch( &lat, &lon, my_emps, 10 );
关于c - 如何在 C 中返回一个 char**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39778688/