2013-10-05 2 views
-1

C 문자열의 끝 부분에있는 Null 문자는 항상 상수이며 수정할 수 없습니까? 의미, C 문자열의 끝에있는 null 문자/0을 프로그래머가 수정할 수 있습니까? 또는 일정하고 제거 할 수 없습니다. 예 : '스테이크'는 cstring에 있고 위치 5에 \ 0이 있습니다. '스테이크'가 수정되면 \ 0을 완전히 제거 할 수 있습니까?C 문자열 null 종결 문자 0 수정

+0

저장 용량에 불과합니다. 다른 캐릭터와 마찬가지로 수정할 수 있습니다. 그러나 표준 C 문자열의 끝을 표시하는 것이 중요합니다. 그렇지 않으면 문자열의 길이가 문자열 함수에 개별적으로 전달되어야하므로 중요하게 사용됩니다. –

+1

질문 자체가 유효하지 않습니다. C- 문자열은 0으로 종료되는 문자열입니다. 0을 제거하면 더 이상 C 문자열이 아니며 더 이상 표준 문자열 함수와 함께 사용할 수 없습니다. 파스칼에 대한 경험이 있다면 : "길이를 파스칼 문자열에서 제거 할 수 있습니까?" - 여기에 제시된 답변과 거의 같습니다. – usr2564301

답변

2

C 문자열의 끝에있는 Null 문자는 항상 상수이며 수정할 수 있습니까?

경우 없음 우리가 (정적 또는 동적) 문자의 배열에 대해 얘기하지만 당신이 상수 문자열을 의미하는 경우 예 문자 등 :

const char* str = "steak"; 

을 수행 할 수 있습니다 프로그래머가 C 문자열 끝에있는 null 문자/0을 수정합니까?

오래 기억하지 읽기 전용으로.

\ 0을 완전히 제거 할 수 있습니까?

예. 당신이에서 '\0'을 예상하는 기능이 문자열을 사용하는 경우 C-string이 std::stringc_str() 또는 data() 멤버 함수, 다음 표준를 금지의 반환 값 인 경우는 그러나 다음의 동작은

+3

리터럴 C 문자열은 상수이기 때문에 수정할 수 없다는 점에 유의할 필요가 있습니다. 그러나 문자열이 동적으로 할당되면 확실히 맞습니다. – icktoofay

+2

다른 말로하면, 당신이 할 수 있다는 말은 아닙니다. – syam

+0

@ 시암 : 좋습니다. :) – LihO

0

정의되지 후행 0 요소의 수정. 물론, 표준이 금지한다고해서 C++ 또는 런타임 환경의 어떤 것도 위반에 대해 경고한다는 것을 의미하지는 않습니다. 꼬리말 인 0을 수정하려는 코드를 작성할 수 있으며 알람을 발생시키지 않고 실행됩니다. 그러나 예측할 수없는 이상한 방법으로 문제가 발생할 가능성이 매우 높습니다.

그렇게하지 마십시오.