2017-11-15 14 views
0

그냥 내 컴퓨터 과학 수업에 cstrings에 대해 알게하고 그냥 나를 때리는, 이는 나는 또한 "5"에 할당 할 수있는 것 같다,할당 값이

char ch[] = "hello"; 

그러나 법적 이 배열의 요소

ch[5] = "!"; 

허용 되나요? 아니면 그냥 배열의 끝에 null 문자를 무시 무엇입니까?

답변

0

아니요. 허용되지 않습니다. 당신이 말했듯이, 이것은 끝에 null 문자를 덮어 씁니다. 유효한 색인에 액세스하고 있기 때문에 오류가 발생하지 않습니다.

그러나 문자열을 인쇄하려고하면 인쇄 기능이 문자열의 끝 부분을 알 수 없습니다. 인쇄 기능은 실수로 0 바이트에 도달 할 때까지 문자를 계속 인쇄합니다. 그렇지 않으면 다른 것이 버퍼 오버플로에 잘못되게됩니다. 이것은 정의되지 않은 동작입니다. 다른 문자열 함수 인 strcpy, strlen, strcmp에도 같은 문제가 발생합니다. 문자열 끝을 찾기 위해 모두 null 문자를 사용합니다.