MST

星途 面试题库

面试题:C语言指针数组在简单文件管理项目中的应用

假设你正在开发一个简单的文件管理系统,需要记录多个文件的路径。请使用C语言指针数组来实现一个功能,能够存储10个文件路径,并编写函数来遍历并打印这些路径。同时,说明如何处理路径长度不同的情况以及可能出现的内存问题。
38.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_FILES 10
#define MAX_PATH_LENGTH 100

// 函数声明
void addPath(char *paths[MAX_FILES], const char *path, int *count);
void printPaths(char *paths[MAX_FILES], int count);

int main() {
    char *paths[MAX_FILES] = {NULL};
    int count = 0;

    addPath(paths, "/home/user/file1.txt", &count);
    addPath(paths, "/var/log/syslog", &count);
    addPath(paths, "/etc/passwd", &count);

    printPaths(paths, count);

    // 释放内存
    for (int i = 0; i < count; i++) {
        free(paths[i]);
    }

    return 0;
}

void addPath(char *paths[MAX_FILES], const char *path, int *count) {
    if (*count >= MAX_FILES) {
        printf("无法添加更多路径,已达到最大限制。\n");
        return;
    }

    paths[*count] = (char *)malloc(strlen(path) + 1);
    if (paths[*count] == NULL) {
        printf("内存分配失败。\n");
        return;
    }
    strcpy(paths[*count], path);
    (*count)++;
}

void printPaths(char *paths[MAX_FILES], int count) {
    for (int i = 0; i < count; i++) {
        printf("路径 %d: %s\n", i + 1, paths[i]);
    }
}

处理路径长度不同的情况

  1. 固定长度数组:定义一个足够大的固定长度数组(如MAX_PATH_LENGTH)来存储路径。这种方法简单,但可能浪费内存,特别是当大部分路径较短时。
  2. 动态内存分配:使用malloc根据实际路径长度分配内存,如代码中的addPath函数。这样可以有效利用内存,但需要注意内存管理,避免内存泄漏。

可能出现的内存问题

  1. 内存泄漏:如果在分配内存后(如malloc),没有相应的free操作,就会导致内存泄漏。在上述代码中,main函数结尾处释放了每个路径分配的内存。
  2. 悬空指针:当释放了一块内存,但指针没有置为NULL时,就可能出现悬空指针。如果后续不小心使用了这个悬空指针,可能导致未定义行为。在释放内存后,应将指针置为NULL,以避免这种情况。
  3. 内存分配失败malloc可能因为系统内存不足而失败,如代码中addPath函数里检查malloc返回值,若失败则给出提示。