나는 C++의 살펴에서 예 nullptr의 사용에 의해 혼란 스러워요 :C 스타일 문자열을 종료하는 데 nullptr이 사용됩니까?
int count_x(char* p, char x)
// count the number of occurrences of x in p[]
// p is assumed to point to a zero-terminated array of char (or to nothing)
{
if (p==nullptr) return 0;
int count = 0;
for (; p!=nullptr; ++p)
if (*p==x) ++count;
return count;
}
// The definition of count_x() assumes that the char* is a C-style string,
// that is, that the pointer points to a zero-terminated array of char.
나는 p가 지정되지 않은 경우 count_x 종료해야 함을 이해하고, 그 끝에 도달 할 때 루프의 종료한다 p가 참조하는 C 스타일 문자열의 내가 count_x()를 사용하는 주요 기능을 빌드 할 때
그러나, 결코 제대로 종료 것 같다 :
int main() {
char teststring[] = {'b', 'l', 'a', 'h', '\0'};
cout << "teststring is: " << teststring << endl;
cout << "Number of b's is: " << count_x(teststring, 'b') << endl;
return 0;
}
는 실행이 쓰레기를 많이 인쇄 한 다음 세그멘테이션 오류로 종료됩니다. count_x
의 for (; p!=nullptr; ++p)
을 for (; *p!='\0'; ++p)
으로 바꾸면 제대로 실행됩니다. 나는 이것이 문자열이 올바르게 종료되지 않았다는 것을 의미한다. 그렇다면 nullptr을 여기에서 사용할 수 있도록 C 스타일의 문자열을 어떻게 종료합니까?
편집 :이 상황을 설명하는 의견에 토론이있었습니다. 위의 내용이 잘못 인쇄 된 2013 년 9 월부터 책의 첫 번째 글자를 사용하고 있습니다. 2015 년 1 월 (코멘트에 링크 된) 책의 세 번째 인쇄물에는 for (; p!=nullptr; ++p)
대신 for (; *p!=0; ++p)
을 사용하는 수정 된 예제가 있습니다. 이 정정 사항은 책의 정오표에도 기록되어 있습니다. 감사!
Edit2가 : 죄송합니다 사람이 분명히 이미 이전에 여기에 질문을 받았다 : Buggy code in "A Tour of C++" or non-compliant compiler?
게시 한'count_x' 함수가 작동하지 않습니다. 'nullptr'은 그런 식으로 작동하지 않습니다. – user2357112
코드가 깨졌습니다. 무시해. 아마도'for (; * p! = 0; ++ p)'를 의미했을 것입니다. –
저에게 책에있는 실수처럼 보입니다. – Galik