c - 如何在 C 中返回一个 char**

标签 c

我已经尝试了一段时间了,但似乎无法正常工作:

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/

相关文章:

c++ - Autotools 提示使用不同上下文编译的文件

c - 如何在两个线程之间发送中断或信号?

c - 单链表的段错误

c - 向 2 个客户端发送 UDP 数据包,只有一个接收

c - 将宏定义为行号

c - 检查泛型数组是否为 MaxHeap 的算法

c - 为什么在 C 中将 argv(参数 vector )定义为指针,以及将其第零定义为程序名称的需要是什么?

c++ - 如何在 C 或 C++ 中创建异构链接列表

c - 用指针影响字符串

c - qsort 不改变我的数组顺序