2011-08-24 4 views
0

내가 선을 분석 한 후이 같은 것을 사용하는 이유 그게 전부 ..뿐만 아니라 기본 이름에서 명령을 얻기 위해 tryng입니다 ...쉘베이스 이름 오류

while (*line == ' ' || *line == '\n') 
         *line++ = '\0';  

        line = basename(line); // base 
        *argv++ = line;    

아니라 기본 이름 보인다 잘 작동하지만, 내가 LS과 같은 명령이 -l 다음 오류가 제공 넣으면 ...

입출력 및 출력이

ls 
arg[0]: 'ls' and arg[1]: '(null)' 
shellTest 

bin/ls 
arg[0]: 'ls' and arg[1]: '(null)' 
shellTest 

ls -l 
arg[0]: '-l' and arg[1]: '-l' 
Execution of the command is failed 
: No such file or directory 

같은 난 후 모든 것이 외에 노력 line = basename(line);을 제거하는 경우입니다 basename 그래서 구문 분석 can not 문제가 ...

이 문제를 어떻게 해결할 수 있습니까?

+0

더 많은 코드가 필요하다고 생각합니다. 복사해야 할 곳을 복사하지 않았을 수 있습니다. –

답변

0

basename()을 사용하는 주변 코드에 문제가있을 수 있습니다. basename()의 POSIX 표준을 말한다 다음 basename() 함수가 후행 '/' 문자를 삭제 경로명 경로가 가리키는 걸릴 경로 이름의 마지막 구성 요소에 대한 포인터를 반환해야

설명.

path가 가리키는 문자열이 모두 '/' 문자로 구성되는 경우 basename()"/" 문자열에 대한 포인터를 반환합니다. path가 가리키는 문자열이 정확히 "//"이면 '/' 또는 "//"이 반환되는지 여부는 구현에 따라 정의됩니다.

경로가 null 포인터이거나 빈 문자열을 가리키는 경우 basename()"." 문자열에 대한 포인터를 반환합니다.

basename() 함수는 path가 가리키는 문자열을 수정할 수 있으며 이후의 basename() 호출로 덮어 쓸 수있는 정적 저장소에 대한 포인터를 반환 할 수 있습니다.

basename() 함수는 스레드로부터 안전 할 필요는 없습니다.

basename() 함수로의 최종 요소에 대한 포인터를 리턴한다

반환 값.

해당 사양에는 많은 여유 공간이 있습니다.

그러나 두 개의 값을 동시에 저장하는 데 동일한 공간을 사용하는 것처럼 보이지만 실패합니다.

관련 문제