2016-10-07 2 views
-1

"내부 또는 외부 명령으로 reconized 없다"는 코드입니다 :C++ 시스템 기능이 그래서 여기

#include <iostream> 
#include <string> 
using namespace std; 
int main(){ 
    cout << "type dir" << endl; 
    string command; 
    cin >> command; //typed C:\Java 
    const char* cml = ("cd C:" + command).c_str(); 
    system(cml); 
    cout << "[System]: Set!"; 
} 

여기 결과입니다

'exe' is not recognized as an internal or external command, 
operable program or batch file. 

난 그냥 시스템을 입력하면 ("CD C : \ Java "), 그러면 작동합니다. 하지만 위와 같은 시스템 함수에 const char을 전달하면 exe가 다시 변환되지 않는다는 오류가 발생합니다. std::string가 연결의 결과로서 리턴로부터

const char* cml = ("cd C:" + command).c_str(); 

cml 변수는 C 스트링 포인터로 초기화되고 :

+0

유일한 차이점은 백 슬래시입니까? –

+1

나는 이것이 창이라고 가정한다. 'system ("echo hello")'를 호출하면 비슷한 오류가 발생합니다. 'echo'는 기본 명령 인터프리터 ('CMD')에 내장되어 있습니다. 별도의 실행 파일이 아니라 커맨드 해석 명령에 의해 실행됩니다. 해당 시스템 호출이 작동하지 않으면 시스템이 잘못 구성되었거나 원하는대로 작동하지 않는 다른 명령 행 처리기를 사용하도록 구성되어 있습니다. – Peter

답변

3

이 정의되지 않은 문제이다. 그러나이 결과는이 명령문이 끝난 직후에 버려지는 임시 변수입니다. 따라서이 행 다음에 문자 배열 포인터 cml이 이미 해제되었습니다.

다음은 다음 문장에서 사용을 위해 병합 결과를 살아있는 유지 않습니다 다음 : 나는 당신의 게시물에서 볼 수

string cml = "cd C:" + command 
system(cml.c_str()) 
+1

기술적으로 정의되지 않은 동작은 매달린 포인터가 다음 줄에서 사용될 때까지 오지 않습니다. –