本文主要是介绍C语言三级指针,目录下文件名称的收集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
核心理论
- 指针定义,只管单位大小。
- 内存分配,要管连续性,和数量。
- 几次分配就需要几次回收。
次要说教
- 当main传递一个char **p 过来是,就是传递了一个地址过来,这个地址p一次就指向了 char ** (char ** 就是一个char *的数组)。文件名就得用char *,再套一层char *的地址数组。
- char * 的内存是有大有小。
- char ** 的内存都是8k。
- 一堆连续的 char **就表示了一堆的文件名称。
- 把这个char **的内存搞好了。
- 再把这个 char **的值传回去就好了,这个charr ** 的值也是一个地址。
GetDirFiles.c
#include "head.h"int GetDirFiles(char *FilePath, char ***FileNamesAddrs, int *FileNamAddrs)
{DIR *datatrade_bak_dir;struct dirent *entry;if ((datatrade_bak_dir = opendir(FilePath)) == NULL){return -1;}// 读取目录下的文件int FileCount = 0;char **FileNames = (char **)calloc(sizeof(char *), 10);char *n = NULL;while ((entry = readdir(datatrade_bak_dir)) != NULL){if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0){continue;}n = (char *)malloc(sizeof(char) * strlen(entry->d_name)+1);strcpy(n, entry->d_name);printf("当前文件:%s\n", n);// int s = (sizeof(char *) * (FileCount + 1));// FileNames = (char **)realloc(FileNames, s);FileNames[FileCount++] = n;}closedir(datatrade_bak_dir);*FileNamesAddrs = FileNames;*FileNamAddrs = FileCount;return 0;
}
main.c
#include "head.h"void main(int agrc, char *agrv[])
{char *FilePath;if (agrc < 2){printf("Usage:%s <dirname>\n", "当前目录");FilePath = ".";}else{FilePath = agrv[1];}// 获取目录下的所有文件char **FileNames;int FileCount;GetDirFiles(FilePath, &FileNames, &FileCount);// 遍历文件for (int i = 0; i < FileCount; i++){printf("=%p=%s==\n", FileNames[i], FileNames[i]);}// 释放内存(重点:有几次molloc就应该有几次free)char *p = FileNames[4];for (int i = 0; i < FileCount; i++){printf("二级指针变量的地址%p 二级指针变量的值%p 二级指针变量的解引用%p 一级指针变量的地址%p 一级指针变量的值%p 一级指针变量的解引用%c\n", &FileNames, FileNames, *FileNames, &FileNames[i], FileNames[i], *FileNames[i]);free(FileNames[i]);}printf("\n");printf("二级指针变量的地址%p 二级指针变量的值%p 二级指针变量的解引用%p 一级指针变量的地址%p 一级指针变量的值%p 一级指针变量%s\n", &FileNames, FileNames, *FileNames, &FileNames[0], FileNames[0], FileNames[0]);free(FileNames);printf("二级指针变量的地址%p 二级指针变量的值%p 二级指针变量的解引用%p 一级指针变量的地址%p 一级指针变量的值%p 一级指针变量%s\n", &FileNames, FileNames, *FileNames, &FileNames[0], FileNames[0], FileNames[0]);return;
}
head.h
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>int GetDirFiles(char *FilePath, char ***FileNamesAddrs, int *FileNamAddrs);
这篇关于C语言三级指针,目录下文件名称的收集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!