>> 스피커 1 :의 프로그램을 작성하자 그 않고 사용자로부터 문자열을 얻는다
CS50 도서관을 사용하여 하는 GetString을 작동합니다.
이를 위해, 우리는 가서 사용합니다 scanf와 함수가하는 GetString
기능은 실제로 사용 후드 아래에.
그러나 나는 의도적으로이 작업을 수행 할거야 버그 방법.
내가 생각하는 방식으로 할거야 바로 수 있지만, 그것은 밝혀 것이라고
내 가정에 무슨 아주, 아주 결함합니다.
그리고 사실, 매우 위험.
때문에 나는이 약 해요 같은 버그 적으로 이용 될 수 있도록
그런 당신의 컴퓨터 나 프로그램 잠재적으로 인수 할 수있다.
>> 다음과 같이 시작하자.
먼저, 우리의 문자열을 선언하자, 그렇지 않으면 문자 스타로 지금 알려진
그리고 님의 전화.
다음 문자열을 사용자에게 메시지를 표시 할 수 있습니다, "주세요 문자열입니다."와 같은 과
의 현재 사용자로부터 문자열을하자 맺다 인용, "% s가 있습니다.", scanf와를 사용하여 에
다른 말은, 이제 우리 scanf와 알린다 실제로 문자열을 얻을 것으로 예상합니까
사용자로부터.
>> 하지만 지금 우리는 scanf와 말할 필요 한 가지 -
문자열을 넣는 곳 사용자가 제공합니다.
글쎄, 난 아주 간단하게 시작하는거야 쉼표의, 내가하고 싶은 것을 지정과
scanf와 거기에 문자열을 넣어.
나는 다음에 뭔가를 인쇄 할거야 %의 대한 printf의 "감사 등
백 슬래시 N 쉼표. "그리고 언제나처럼, 난 문자열 s에 전달하는 것.
이제 저장하게 컴파일하고이를 실행 우리가 유도 할 수없는 경우 프로그램 및 참조
문제는 예측했다.
>> scanf와-1을 확인합니다.
./scanf-1.
문자열하시기 바랍니다.
의이 같은 것을 제공하자 "안녕하세요." "널 주셔서 감사합니다." 흠, 그건 아니에요
내가 기대하고 있었는지.
웬일이야?
>> 우리가 선언 때문에 글쎄요, 그것은 밝혀 의 문자 스타로하지만 우리는하지 않았다
실제로의 주소들에 저장 메모리의 실제 덩어리, scanf와하지 않았다
문자열을 넣을 곳이 그 안으로 사용자가 입력
사실, 사용자가 있다면 지금 상태에서 입력합니다 "안녕하세요"보다 훨씬 긴 문자열
예를 들어 여러 줄의 텍스트 또는 여러 텍스트 단락, 꽤의 정보
우리가 유도 수도 가능 세그먼트 오류 소위.
>> scanf와 알고하지 않을 것입니다 때문 실제로 주소를 두지 않은
의 내부.
오히려 그것은 어떤 가치를 볼 것 들에서, 어떤 패턴은 비트 그 수도
잘 쓰레기 값이, 이 단지 우연히.
그리고 scanf와는 여전히 작성하려고 할 것입니다 그 주소로 사용자 문자열
그것은 쓰레기 값 경우에도 어느 참으로 충돌을 일으킬 수 있습니다.
>> 그래서 우리는 어떻게이 문제를 해결하는거야?