我有下面的代碼列出目錄中的所有文件。我試圖將每個ep-> d_name添加到數組中,但到目前爲止,我所嘗試過的所有功能都沒有奏效。我應該如何繼續?如何將ep-> d_name插入C中的數組中
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <time.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/times.h>
#include <sys/wait.h>
int main (void){
DIR *dp;
struct dirent *ep;
dp = opendir("./");
int count = 0;
char *fileNames = calloc(256, sizeof(char));
if(dp != NULL){
while(ep = readdir(dp)){
printf("%s\n", ep->d_name);
count = count+1;
}
for (int i=0; i<count; i++){
fileNames[i] = ep->d_name;
}
closedir(dp);
}else{
perror("Couldn't open the directory");
}
return 0;
}
這段代碼必須保持不變:
int main (void){
DIR *dp;
struct dirent *ep;
dp = opendir("./");
if(dp != NULL){
while(ep = readdir(dp)){
printf("%s\n", ep->d_name);
}
closedir(dp);
}else{
perror("Couldn't open the directory");
}
return 0;
}
你嘗試過什麼?提供示例。我也看不到在你的代碼中任何地方聲明的數組,給我們更多的信息。 – Bargros
你的意思是你的'fileNames'變量是單個字符串嗎?你不想讓它成爲一串字符串嗎? –
是的,每個字符串實際上都是一個char *,一個指向內存中該字符串數據的指針,所以如果要存儲多個字符串,則必須具有指向char *或char **的指針,如下所示。當你查看手冊頁中的'scandir'定義時會更加困惑 - 因爲它保存了它自動分配的char **的地址,其第二個元素實際上是一個指向char **或char **的_pointer_ *'。然後,我傳入char **的_address_,我希望'scandir'存儲它分配的char **數組的_address_。 –