C在c中将字符串存储到数组中
CStoring strings into an array in c
我正在尝试读取目录中的文件并将每个文件名存储在一个字符串数组中。我无法让它为我的生活工作。这是函数:
char *readFile(char *dir){
char *fileStringArray[1000];
DIR *dirPointer;
int file_count = 0;
struct dirent *file;
struct stat fileType;
int i = 0;
if ((dirPointer = opendir(dir)) == NULL){
printf("Directory not found, try again\n");
return NULL;
}else{
printf("Reading files in directory\n");
while((file = readdir(dirPointer)) != NULL){ //iterate through contents of directory
stat(dir, &fileType);
if(i > 1){ //ignore . and .. directories that appear first
file_count++;
printf("%s\n", file->d_name);
strcpy(fileStringArray[i-2], file->d_name); //crashes, replace
//with [i] to not crash, but i-2 makes more sense to me
//fileStringArray[i-2] = &file->d_name; alternate idea
}
else{
i++;
}
}
int j;
for(j = 0; j < file_count; j++){
printf(":::%s\n", fileStringArray[j]); //print the string array
}
}
printf("Done reading\n\n");
closedir(dirPointer);
return dir;
}
您的代码有两个问题。主要的一个是您尝试将字符串存储在 1000 个元素的字符指针数组中。指向 char 的指针不足以存储 string,它实际上需要指向一些内存。您可以通过多种方式解决它,考虑将 strcpy 函数更改为 strdup - 这将为您分配内存。或者您需要将 fileStringArray 更改为字符数组的数组 (char fileStringArray[1000][100]).
第二个问题是 i ,如果你真的想在数组中前进,你应该无条件地递增它。
另外,如果你能 post 完整的例子就好了,这样我就不用猜测 headers 来包含了。
我正在尝试读取目录中的文件并将每个文件名存储在一个字符串数组中。我无法让它为我的生活工作。这是函数:
char *readFile(char *dir){
char *fileStringArray[1000];
DIR *dirPointer;
int file_count = 0;
struct dirent *file;
struct stat fileType;
int i = 0;
if ((dirPointer = opendir(dir)) == NULL){
printf("Directory not found, try again\n");
return NULL;
}else{
printf("Reading files in directory\n");
while((file = readdir(dirPointer)) != NULL){ //iterate through contents of directory
stat(dir, &fileType);
if(i > 1){ //ignore . and .. directories that appear first
file_count++;
printf("%s\n", file->d_name);
strcpy(fileStringArray[i-2], file->d_name); //crashes, replace
//with [i] to not crash, but i-2 makes more sense to me
//fileStringArray[i-2] = &file->d_name; alternate idea
}
else{
i++;
}
}
int j;
for(j = 0; j < file_count; j++){
printf(":::%s\n", fileStringArray[j]); //print the string array
}
}
printf("Done reading\n\n");
closedir(dirPointer);
return dir;
}
您的代码有两个问题。主要的一个是您尝试将字符串存储在 1000 个元素的字符指针数组中。指向 char 的指针不足以存储 string,它实际上需要指向一些内存。您可以通过多种方式解决它,考虑将 strcpy 函数更改为 strdup - 这将为您分配内存。或者您需要将 fileStringArray 更改为字符数组的数组 (char fileStringArray[1000][100]).
第二个问题是 i ,如果你真的想在数组中前进,你应该无条件地递增它。
另外,如果你能 post 完整的例子就好了,这样我就不用猜测 headers 来包含了。