c로 파일인지 폴더 구별할수있게하려면..

pooh311의 이미지

 while ((pent=readdir(pdir)) != '\0'){   
               stat(pent->d_name, &st); 
          
               if (S_ISDIR(st.st_mode)) {
                  pent->d_name[strlen(pent->d_name)+1]='\0'; 
                  pent->d_name[strlen(pent->d_name)]='/'; 
               } 
               printf("%s\n", pent->d_name);
        }

이렇게 하면 파일은 그대로 출력되고 폴더는 폴더명 뒤에 '/' 붙어서 나오지 않나요??
근데 어떤 파일에는 뒤에 '/'붙어서 나오네요..
제가 실수한게 있나요??

cinsk의 이미지

struct dirent::d_name은 사용자가 임의로 수정할 수 있는 member가 아닙니다. 따라서 추가로 "/"를 넣을 수 없습니다. 또한 readdir(3)이 리턴하는 것은 NULL이지 '\0'이 아닙니다. 단순히 디렉토리 이름 뒤에 "/"를 붙여서 출력하는 것이 목적이라면 다음과 같이 하면 됩니다:

while ((pent=readdir(pdir)) != NULL) {
  stat(pent->d_name, &st);
  printf("%s%s\n", pent->d_name, S_ISDIR(st.st_mode) ? "/" : "");
}