我是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填充了我需要的信息。但我希望能够从主函数访问此数组。我该怎么办?
答案 0 :(得分:0)
我假设您的编译器正在警告您有关返回局部变量的信息。
char *arrayOfArraysOfChars[30][50]
该函数完成后,此变量使用的内存将在下一个堆栈帧中重用,将其覆盖并使其无用。
a)将其作为参数传递
b)将其设为静态(yuk)
c)动态分配它并返回指针
另外,考虑使用分配的字符串而不是数组的链表,因为我想您不确定自己将要找到多少个文件,或者它们的名称有多长。