gpt4 book ai didi

c - 试图在 C 中返回指向二维数组的两个指针

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

我是 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 填充了我需要的信息。但我希望能够从 main 函数访问这个数组。我该怎么做?

最佳答案

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

char *arrayOfArraysOfChars[30][50]

该变量使用的内存将在函数完成时重新用于下一个堆栈帧,覆盖它并使其无用。

a) 作为参数传入

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

c) 动态分配并返回指针

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

关于c - 试图在 C 中返回指向二维数组的两个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52912026/

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