首页 文章

使用malloc和realloc动态地将字符串添加到char指针

提问于
浏览
-1

我正在尝试使用C中的Dirent Header文件读取目录 .

我在char数组中的给定目录中存储文件名时遇到问题 .

代码如下 .

char * FileNames;

while ( ( DirentPointer = readdir(DirectoryPointer) ) != NULL) {

    strcpy(&FileNames[Counter], DirentPointer -> d_name);

    Counter++;
}

当我运行应用程序时,我遇到了分段错误 . 我认为由于内存分配,strcpy会导致应用程序错误 .

谁能告诉我如何使用malloc和realloc动态地向FileNames Char *添加内存分配?

1 回答

  • 1

    您的代码会产生未定义的行为,或者很可能会崩溃 . 那是因为 FileNames 是一个指向一个字符的指针,而不是一个用于复制字符串的内存缓冲区,函数 strcpy 不会对要复制的缓冲区进行边界检查 . 所以 strcpy 会尝试写入你没有为此目的分配的内存 . 您需要先分配内存来复制文件名 .

    #define MAX_FILE_NUM 1000
    
    char *FileNames[MAX_FILE_NUM] = {0}; // initialize to NULL
    int Counter = 0;
    
    while((DirentPointer = readdir(DirectoryPointer)) != NULL) {
        FileNames[counter] = malloc(strlen(DirentPointer->d_name) + 1); // + 1 for the null byte
        // check for NULL
        if(FileNames[i] != NULL) {
            strcpy(FileNames[i], DirentPointer->d_name);
            Counter++;
        }
        else {
            // handle the NULL case
            // maybe try malloc again 
        }
    }
    
    // after you are done with the FileNames
    
    for(int i = 0; i < Counter; i++) {
        free(FileNames[i]);
        FileNames[i] = NULL;
    }
    

相关问题