gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:20:38 24 4
gpt4 key购买 nike

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

我在将文件名存储在字符数组内的给定目录中时遇到问题。

代码如下。

char * FileNames;

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

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

Counter++;
}

当我运行应用程序时,我遇到了段错误。我认为 strcpy 由于内存分配而导致应用程序出现故障。

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

最佳答案

您的代码会产生未定义的行为或者很可能会崩溃。这是因为 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;
}

关于c - 使用 malloc 和 realloc 动态地将字符串添加到 char 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com