我在使用指针时遇到了很大的困难。在我看来,我想要完成的声音相当简单:我想定义一个多维 char 数组,而不是它的大小,然后让第二种方法分配必要的内存,并用请求的数据填充它.
现在,我已经尝试了无数个小时来完成这个,用谷歌搜索,直到我眼睛干涩,我仍然无法修复它。因此,我希望你们中的任何人都知道这将如何成为可能。
我想象的是定义一个指针char** files
,以及一个int total_files
将用于我的方法的计数器print_files()
。打印文件然后会 calloc 和 malloc 变量,然后我们将用相关数据填充它。
现在在下面的代码中,我尝试了这个;但是,在运行时,我只会收到非常详细的消息:“分段错误(核心转储)”。在使用 GDB 进行调试时,它指向:
13 *files[i] = malloc(sizeof(char) * 100);
现在,这是针对 C 编程(适用于 Linux)的入门课程,您可能会在此处看到许多错误。不过,我愿意,谢谢你的时间。在没有方法/指针的情况下让代码工作没有任何问题,所以我确定我可能只是以某种方式混淆了语法。
#define _SVID_SOURCE
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<dirent.h>
#include <time.h>
int print_files(char*** files, int* total_files) {
int size = 10;
**files = calloc(size, sizeof(char *));
for(int i = 0; i < size; i++) {
*files[i] = malloc(sizeof(char) * 100);
}
*total_files = size;
}
int main() {
char** files;
int num_files;
num_files = 0;
printf("-- Start print_files\n");
print_files(&files, &num_files);
printf("-- end print_files, number of files: %d\n", num_files);
for(int i = 0; i < num_files; i++)
printf("Out: %s\n", files[i]);
printf("total_files=%d\n", num_files);
return 0;
}