我正在尝试使用 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/