1 00:00:00,000 --> 00:00:00,180 2 00:00:00,180 --> 00:00:02,920 >> 스피커 1 :의 프로그램을 작성하자 그 않고 사용자로부터 문자열을 얻는다 3 00:00:02,920 --> 00:00:05,700 CS50 도서관을 사용하여 하는 GetString을 작동합니다. 4 00:00:05,700 --> 00:00:08,720 이를 위해, 우리는 가서 사용합니다 scanf와 함수가하는 GetString 5 00:00:08,720 --> 00:00:10,950 기능은 실제로 사용 후드 아래에. 6 00:00:10,950 --> 00:00:13,780 그러나 나는 의도적으로이 작업을 수행 할거야 버그 방법. 7 00:00:13,780 --> 00:00:17,230 내가 생각하는 방식으로 할거야 바로 수 있지만, 그것은 밝혀 것이라고 8 00:00:17,230 --> 00:00:19,380 내 가정에 무슨 아주, 아주 결함합니다. 9 00:00:19,380 --> 00:00:20,800 그리고 사실, 매우 위험. 10 00:00:20,800 --> 00:00:24,750 때문에 나는이 약 해요 같은 버그 적으로 이용 될 수 있도록 11 00:00:24,750 --> 00:00:28,870 그런 당신의 컴퓨터 나 프로그램 잠재적으로 인수 할 수있다. 12 00:00:28,870 --> 00:00:30,200 >> 다음과 같이 시작하자. 13 00:00:30,200 --> 00:00:33,540 먼저, 우리의 문자열을 선언하자, 그렇지 않으면 문자 스타로 지금 알려진 14 00:00:33,540 --> 00:00:34,750 그리고 님의 전화. 15 00:00:34,750 --> 00:00:39,400 다음 문자열을 사용자에게 메시지를 표시 할 수 있습니다, "주세요 문자열입니다."와 같은 과 16 00:00:39,400 --> 00:00:44,250 의 현재 사용자로부터 문자열을하자 맺다 인용, "% s가 있습니다.", scanf와를 사용하여 에 17 00:00:44,250 --> 00:00:47,760 다른 말은, 이제 우리 scanf와 알린다 실제로 문자열을 얻을 것으로 예상합니까 18 00:00:47,760 --> 00:00:48,630 사용자로부터. 19 00:00:48,630 --> 00:00:50,810 >> 하지만 지금 우리는 scanf와 말할 필요 한 가지 - 20 00:00:50,810 --> 00:00:53,350 문자열을 넣는 곳 사용자가 제공합니다. 21 00:00:53,350 --> 00:00:57,840 글쎄, 난 아주 간단하게 시작하는거야 쉼표의, 내가하고 싶은 것을 지정과 22 00:00:57,840 --> 00:00:59,320 scanf와 거기에 문자열을 넣어. 23 00:00:59,320 --> 00:01:04,818 나는 다음에 뭔가를 인쇄 할거야 %의 대한 printf의 "감사 등 24 00:01:04,818 --> 00:01:10,670 백 슬래시 N 쉼표. "그리고 언제나처럼, 난 문자열 s에 전달하는 것. 25 00:01:10,670 --> 00:01:14,920 이제 저장하게 컴파일하고이를 실행 우리가 유도 할 수없는 경우 프로그램 및 참조 26 00:01:14,920 --> 00:01:16,590 문제는 예측했다. 27 00:01:16,590 --> 00:01:18,650 >> scanf와-1을 확인합니다. 28 00:01:18,650 --> 00:01:20,960 ./scanf-1. 29 00:01:20,960 --> 00:01:21,830 문자열하시기 바랍니다. 30 00:01:21,830 --> 00:01:25,540 의이 같은 것을 제공하자 "안녕하세요." "널 주셔서 감사합니다." 흠, 그건 아니에요 31 00:01:25,540 --> 00:01:26,750 내가 기대하고 있었는지. 32 00:01:26,750 --> 00:01:28,240 웬일이야? 33 00:01:28,240 --> 00:01:32,040 >> 우리가 선언 때문에 글쎄요, 그것은 밝혀 의 문자 스타로하지만 우리는하지 않았다 34 00:01:32,040 --> 00:01:36,120 실제로의 주소들에 저장 메모리의 실제 덩어리, scanf와하지 않았다 35 00:01:36,120 --> 00:01:38,940 문자열을 넣을 곳이 그 안으로 사용자가 입력 36 00:01:38,940 --> 00:01:42,510 사실, 사용자가 있다면 지금 상태에서 입력합니다 "안녕하세요"보다 훨씬 긴 문자열 37 00:01:42,510 --> 00:01:46,780 예를 들어 여러 줄의 텍스트 또는 여러 텍스트 단락, 꽤의 정보 38 00:01:46,780 --> 00:01:50,280 우리가 유도 수도 가능 세그먼트 오류 소위. 39 00:01:50,280 --> 00:01:53,570 >> scanf와 알고하지 않을 것입니다 때문 실제로 주소를 두지 않은 40 00:01:53,570 --> 00:01:54,610 의 내부. 41 00:01:54,610 --> 00:01:58,000 오히려 그것은 어떤 가치를 볼 것 들에서, 어떤 패턴은 비트 그 수도 42 00:01:58,000 --> 00:02:00,910 잘 쓰레기 값이, 이 단지 우연히. 43 00:02:00,910 --> 00:02:04,600 그리고 scanf와는 여전히 작성하려고 할 것입니다 그 주소로 사용자 문자열 44 00:02:04,600 --> 00:02:08,789 그것은 쓰레기 값 경우에도 어느 참으로 충돌을 일으킬 수 있습니다. 45 00:02:08,789 --> 00:02:10,130 >> 그래서 우리는 어떻게이 문제를 해결하는거야? 46 00:02:10,130 --> 00:02:12,523