2012-01-20 5 views
0

일부 세부 사항파일의 확장자를 추출

  • 언어 : C
  • 시스템 : 리눅스; 커맨드 라인 (터미널)와 협력, 파일은 C와 터미널
  • 사용자 경험을 통해 읽기 : 3 개월

내가 예를 들어 주어진 파일 "은 myfile의 확장을 추출하기 위해 노력 해왔다. wld ", 나중에 파일의 내용을 작업하기 전에 올바른 유형의 파일이 터미널에 입력되었는지 확인하도록 할 수 있습니다. 할당을 위해서 필요하다. "strtok"함수를 사용하여 입력을 구분 기호 "."로 섹션으로 구분했다.

dot=strtok(argv[1], "."); 
filename=dot; 

파일 이름이 지금 입력 "myfile을"의 첫 부분이다, 내 질문에 내가 후 두 번째 부분에 얻을 수있는 방법이다 ".", 알려 주시기 바랍니다, 그리고 그것을 간단하게 충분히 기다려주십시오 가능한 한 나는 기본적으로 당신은 단지 NULL 포인터를 다시 strtok를 호출 할 필요가 http://www.cplusplus.com/reference/clibrary/cstring/strtok/

참조하여 응답의

감사

+0

"." 파일 이름에? – Dmitri

답변

0

를 사용을 할 수 있도록. 그래서 : 위의 코드 뒤에

filename = strtok(argv[1], "."); 
fileext = strtok(NULL, "."); 
2
char *extension; 
extension=strtok(NULL, "."); 

.

첫째, strtok(str, ".") 같은 str에 포인터를 strtok()를 호출합니다.
다음 토큰을 계속 호출하려면 strtok(NULL, ".")을 계속 사용하십시오.
반환 값이 null (\0)이면 문자열의 끝입니다.

0

호출을 다시 매개 변수로 NULL을 전달 strtok : strtok에 대한 첫 번째 호출하면 토큰 화 원하는 문자열을 가리켜 야

extension=strtok(NULL,".") 

. 그 이후의 모든 호출은 첫 번째 매개 변수로 NULL이 있어야합니다. strtok은 첫 번째 호출 중에 전달 된 전체 문자열을 처리 할 때까지 토큰을 반환합니다.

0

파일 이름에 두 개 이상의 "."가 포함될 수 있습니다. foo. bar.buz 예를 들면. 코드를 사용하면 foo는bar.buz 대신 예상대로 버즈 foo.bar 를 얻을 수 있습니다. 올바른 방법은 다음과 같이 사용하는 것입니다.

char *filename = argv[1]; 
char *ext = strrchr(argv[1], '.'); 
if (ext) { 
    *ext = '\0'; 
    ext++; 
}