2017-02-05 2 views
0

디렉토리의 파일을 읽고 각 파일 이름을 문자열 배열에 저장하려고합니다. 나는 내 삶을 위해 일할 수 없다. 함수는 다음과 같습니다.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; 
} 
+1

'fileStringArray'는 초기화되지 않은 * 포인터의 배열입니다. 그 값에 접근하면 (즉,'strcpy (fileStringArray [i-2], file-> d_name)') 결과는 정의되지 않은 동작이됩니다. 먼저 저장하려는 각 문자열에 대해 메모리를 할당하십시오. – kaylum

+0

C 서적을 읽으십니까? 통계적으로, 나는 책을 읽는 사람들이 이런 종류의 기본적인 문제를 가지지 않는 것처럼 보이기 때문에 "아니오"에 내기를 걸었습니다 ... – Sebivor

답변

1

코드에 두 가지 문제가 있습니다. 주된 것은 char에 대한 포인터의 1000 요소 배열에 문자열을 저장하려고한다는 것입니다. char에 대한 포인터는 문자열을 저장하기에 충분하지 않으며 실제로는 일부 메모리를 가리킬 필요가 있습니다. 여러 가지 방법으로 해결할 수 있습니다. strcpy 기능을 strdup으로 변경하는 것이 좋습니다. 메모리를 할당합니다. 또는 배열의 문자 배열 (char fileStringArray [1000] [100])이되도록 fileStringArray를 변경해야합니다.

두 번째 문제점은 i이며 실제로 배열로 이동하려면 무조건 증가시켜야합니다.

또한 전체 예제를 게시 할 수 있다면 좋을 것이므로 포함 할 헤더를 추측 할 필요가 없습니다.

+0

미안 해요, 내 프로젝트의 나머지 부분을 게시하고 싶지는 않습니다. heres headers : #include #INCLUDE 사용법 #include 사용법 #include 사용법 #include 사용법 #include 사용법 #include cowchin12

관련 문제