2012-09-03 4 views
1

이 코드 내가 char 배열에 "Hello World" "OUTPUT.TXT"텍스트 파일로 전송 다음C++ : 문자 배열에 문자 배열을 저장할 때 Null이 저장됩니까?

ofstream obj("output.txt"); 
obj<<"Hello World"; 

지금 문자 배열의 끝에서 종료 널 (null)이 있습니다에서보세요 그들.

그래서 "output.txt"라는 텍스트 파일에 char 배열을 보내면 종료 null도 보내고 저장되는지, 왜 그런지, 왜 그럴까요?

+0

16 진수 편집기를 사용하면 쉽게 확인할 수 있습니다. – Indy9000

답변

6

는 파일에 여러 번 쓴 경우 무슨 일이 일어날 지 생각해

ofstream output("myfile.txt"); 
output << "Hello"; 
output << " "; 
output << "world"; 

문자열 종료 때마다 당신은 당신이 두 번째 시간을 쓸 때 다음 시스템을 것이다, 파일에 뭔가를 쓰기가 추가 된 경우 파일에서 0을 찾으려면 제거한 다음 새 텍스트 다음에 다시 추가하십시오. 또한, 시스템은 출력을 위해 다르게 구현되어야한다. 콘솔.

귀하의 질문에 대답하십시오 : 아니오, 종결자를 작성하지 않았습니다. 문자열이 메모리에서 끝나는 지점을 함수가 알기 위해 메모리의 문자열에서만 사용합니다.

+0

추가하려면 output.write()를 사용하면 호출 방법에 따라 원하는 경우 null을 쓸 수 있습니다. –

+0

@RobertMason 문자열이 리터럴이 아니고'std :: string'이지만 nul 문자를 포함 할 수도 있습니다. –

+0

@RobertMason 물론, 그렇지만 기본 시스템이 아닌 그것을 작성하기로 결정한 사람이 있습니다. –

2

아니요. null 종료는 C/C++에서 문자열 끝 부분을 알기 위해 사용하는 것입니다.

실제로 원하는 문자 뒤에 0x00 바이트를 쓰게되면 제어가 매우 귀찮을 것입니다. 그런 다음 원하는 글자를 쓰려면 번거 로움이 될 것입니다.

+0

"C/C++"는 "0으로 끝나는 문자열을 처리하는 함수"를 의미합니다. –

+0

@MikeSeymour 제 생각에 이것은 C 표준이 문자열을 정의하는 방법이라고 생각합니다. 그러나 여러분이 확실히 다루고있는 함수와 만 관련이 있다는 것은 확실합니다. 그리고 C++에서는 C와 같이 일반적이지 않을 것입니다. – David