2017-09-29 3 views
-2

파일 이름을 인수 (예 : books.txt)로 사용하고 실행 한 다음 결과를 새 텍스트 파일로 출력하는 프로그램이 있습니다. 첨부 파일 (예 : books_output.txt)을 사용하여 출력 파일의 이름을 지정해야합니다. 내가 시도변수 및 텍스트를 통해 파일 이름을 지정하는 C++ 구문

방법은

ofstream outputFile; 
outputFile.open(argv[1] + "_output.txt", ofstream::out); 

했지만,이 컴파일되지 않았다. 어떻게하면됩니까?

+0

S /'는 argv [1]'/'표준 : : 문자열과 같아야있다 (변수는 argv [1])' – user0042

+0

귀하의 질문에 내가 C에서 문자열을 연결 어떻게 '입니다 ++ ", google for 당신이 맞은 것을보고 – pm100

+0

@ user0042 - ofstream.open이 문자열 파일 이름을 지원하는지 여부에 따라 그가 사용중인 C++의 버전에 따라 달라질 것임 – pm100

답변

1

(내 댓글에서 언급 한 바와 같이)과 같이 보여야 문 :

outputFile.open(std::string(argv[1]) + "_output.txt", ofstream::out); 
      // ^^^^^^^^^^^^  ^

이라고 가정하면 argv[1]은 표준 main() si gnature

int main(int argc, char* argv[]) 

argv[1]char* 포인터이고 당신은 char* 포인터 그런 식으로 연결할 수 없습니다.

구식 C++ 표준 버전에 대한 지원에 대해 귀찮은 사람들이 있기 때문에 이전 버전의 std::ofstream::open() 서명은 const std::string 매개 변수를 직접 지원하지 않지만 const char* 만 지원합니다. 경우에는 그 상황이 당신의 문

outputFile.open((std::string(argv[1]) + "_output.txt").c_str(), ofstream::out); 
-3

2 개의 C 문자열 사이에 +를 넣을 수 없습니다. 대신 std :: string을 사용하십시오. 이

ofstream outputFile; 
std::string fname = std::string(argv[1]) + "_output.txt"; 
outputFile.open(fname.c_str(), ofstream::out); 

최근의 C++ 버전이 같은 일을 더 좋은 읽어하지만 의미

outputFile.open(fname, ofstream::out); 

을 허용합니까

+2

분명히 argv [1] + "_output.txt"는 함수 밖에서 불법 인 것처럼? 그것은 문자열을 초기화하고 어느 인수를 미리 변환 할 수 있는지 알 수 없다. 그냥' (std :: string (argv [1]) + "_output.txt"'), C++ 14'std :: string' 리터럴 ('argv [1] +' _output.txt "s'는 문자열 리터럴에서's'를 후행합니다. 아니면 두 단계를 수행하십시오 :'std :: string fname = argv [1]; fname + = "_output.txt"; ' – ShadowRanger

+0

저는 C++ 11을 사용하고 있습니다. @ pm100과 ShadowRanger가 모두 효과가있었습니다. 도와 주셔서 감사합니다! –

+0

oops - 내 나쁜 - std :: string에서 arv를 감싸는 것을 잊어 버렸습니다. – pm100

관련 문제