【问题标题】:Trying to return two pointer to two dimensional Array in C试图在C中返回两个指向二维数组的指针
【发布时间】:2018-10-21 04:05:23
【问题描述】:

我对 C 非常陌生,并且无法返回指向二维数组的指针。

代码的目的是进入一个名为 rules 的文件夹。从此文件夹中,它找到规则文件夹中所有文件的所有文件路径。我想用完整的文件路径填充二维数组。到目前为止,我的代码能够使用文件路径填充二维数组(这是在 listFiles 方法中完成的)。我想在 main 方法中使用这个二维数组来做一些进一步的事情。但是我在尝试让它返回时遇到问题,而不会导致编译问题。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#ifdef WINDOWS
#include <direct.h>
#define GetCurrentDir _getcwd
#else
#include <unistd.h>
#define GetCurrentDir getcwd
#endif
#include <string.h>

void listFiles(char *path);

int main() {
  // Directory path to list files
  char path[100];
  char buff[FILENAME_MAX];
  GetCurrentDir(buff, FILENAME_MAX);
  // printf("%s\n",buff);
  char toRuleFolder[100] = "/rules";
  strcat(buff, toRuleFolder);
  // printf("%s\n",buff);

  listFiles(buff);

  return 0;
}

void listFiles(char *path) {
  char pathToUse[100];
  struct dirent *dp;

  char *arrayOfArraysOfChars[30][50]; // array to hold     multiple single
                                      // arrays of characters
  DIR *dir = opendir(path);
  printf(" %s\n", path);

  return;

  char *token;
  const char s[2] = "-";
  int counter = 0;
  char pathToSave[100];

  while ((dp = readdir(dir)) != NULL) {

    token = strtok(dp->d_name, "");

    while (token != NULL) {

      if (strcmp(token, ".") != 0) {
        if (strcmp(token, "..") != 0) {

          strcpy(pathToSave, "");
          strcpy(pathToSave, path);
          strcat(pathToSave, "/");
          strcat(pathToSave, token);

          strcpy(arrayOfArraysOfChars[counter], pathToSave);

          counter += 1;
        }
      }

      token = strtok(NULL, s);
    }
  }

  printf("%s\n", "sdasdasdssad");
  printf("%s\n", arrayOfArraysOfChars[0]);
  printf("%s\n", arrayOfArraysOfChars[1]);
  printf("%s\n", arrayOfArraysOfChars[2]);
  printf("%s\n", arrayOfArraysOfChars[3]);

  closedir(dir);
}

arrayOfArraysOfChars 填充了我需要的信息。但我希望能够从主函数访问这个数组。我该怎么做?

【问题讨论】:

  • 你有“编译问题”。请通过逐字和完整引用错误消息来更准确。
  • 请使用更少的空行和更一致的缩进使您的代码更具可读性。
  • 请描述你对这一行创建了什么样的变量char *arrayOfArraysOfChars[30][50];的理解,包括3050的含义。相比之下请描述char arrayOfArraysOfChars[30][50];
  • 在您的职能范围内,请描述您对上线/上线后发生的情况的理解return;
  • @Stargateur:请不要将代码从 Allman 转换为 1TBS 样式。两者都可以接受。不一致的代码你可以选择你的格式;一致的代码应该与 OP 的初衷保持一致。

标签: c arrays pointers


【解决方案1】:

我假设你的编译器警告你返回局部变量。

char *arrayOfArraysOfChars[30][50]

该变量使用的内存将在函数执行完毕后被下一个栈帧重用,覆盖它并使其无用。

a) 作为参数传入

b) 让它成为静态的 (yuk)

c) 动态分配并返回指针

另外,请考虑使用已分配字符串的链表而不是数组,因为我猜您不确定要找到多少文件或它们的名称有多长。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多