[질문] path에서 filename만 뽑아내서 출력해주는 코드

chonan의 이미지

debugging 을 위한 code 작업을 하고 있는 중입니다.

제가 봉착한 문제는,
파일 이름에 대한 정보도 debug line에 출력해주고 싶은데..
__FILE__을 이용하니 path까지 나옵니다.

때론, 줄이 길어져서 한 줄을 넘기곤하구요.
그래서 path에서 filename만 뽑아내고 싶습니다.
=======================================

#include <stdio.h>
#include <string.h>

#define DELIMITERS "/"

char *getFilenamewoPath(void);

int
main(void)
{

  printf("filename = %s", getFilenamewoPath());

  return 0;
}


char *getFilenamewoPath(void)
{
  char *filenamewPath, *filenamewoPath, *tempPtr = NULL;
  strcpy(filenamewPath, __FILE__);

  filenamewoPath = tempPtr;
  tempPtr = strtok(filenamewPath, DELIMITERS);

  while (tempPtr != NULL) {
    filenamewoPath = tempPtr;
    tempPtr = strtok(NULL, DELIMITERS);
  };

  if (filenamewoPath != NULL) return filenamewoPath;
  else
    {
      strcpy(filenamewoPath, "no file");
      return filenamewoPath;
    }
}

=======================================
segmentation fault를 내면서 죽는데, 이유를 모르겠습니다. ㅠ.ㅠ
고수님들.. 도와주세요!

cjh의 이미지

basename() 을 사용하면 될것 같네요.

--
익스펙토 페트로눔

zflute의 이미지

파일이름만 뽑는 건 cjh님 말씀처럼 basename을 이용하시면 되고,
코드에서 segmentation fault가 나는건
char *filenamewPath, *filenamewoPath, *tempPtr 에서 포인터만 선언해서 그렇습니다.
strcpy 대신에 strdup를 사용하거나 그 전에 영역을 할당해 주면 됩니다.

filenamewPath = strdup(__FILE__);