1 00:00:00,000 --> 00:00:02,760 [Powered by Google Translate] [WEEK 5] 2 00:00:02,760 --> 00:00:04,760 [데이비드 J. Malan, 하버드 대학교] 3 00:00:04,760 --> 00:00:11,990 [이 CS50 수 있습니다.] [CS50.TV] 4 00:00:11,990 --> 00:00:17,780 [여자] 그는 거짓말을하고있어, 일에 대해, 나도 몰라. 5 00:00:17,780 --> 00:00:20,300 [남자] 그래서 우리는 무엇을 알 수 있습니까? 6 00:00:20,300 --> 00:00:24,120 [여자] 9시 15 분에 레이 산토는 ATM에 답니다. 7 00:00:24,120 --> 00:00:27,420 [남자] 그럼 질문에, 그는 9시 16 분에 무슨 짓 한거야? 8 00:00:27,420 --> 00:00:29,980 [여자]는 무언가에 9 밀리 찍습니다. 9 00:00:29,980 --> 00:00:31,900 아마 그 저격수를 보았다. 10 00:00:31,900 --> 00:00:34,000 [남자] 또는 그가 그와 함께 작업했다. 11 00:00:34,000 --> 00:00:36,330 [여자] 기다립니다. 하나를 뒤로 이동합니다. 12 00:00:36,330 --> 00:00:38,330 [남자]는 당신이 무엇을 보이나요? 13 00:00:38,330 --> 00:00:44,520 [♫ 긴장감 흐르는 음악은 ♫] 14 00:00:44,520 --> 00:00:48,320 [여자] 얼굴을 가져 오십시오. 전체 화면. 15 00:00:48,320 --> 00:00:51,230 [남자] 그의 안경을 쓴 사람이야. >> 반사 된 영상이있어. 16 00:00:51,230 --> 00:01:00,810 [♫ 긴장감 흐르는 음악은 ♫] 17 00:01:00,810 --> 00:01:03,580 [남자] 그게 Nuevita의 야구 팀입니다. 그 팀 로고 네요. 18 00:01:03,580 --> 00:01:07,790 [여자] 저 재킷을 입은 사람에게 얘기하고있어. 19 00:01:07,790 --> 00:01:13,730 >> [데이비드 Malan] 지금이 CS50 주 5, 오늘날 우리는 당신을 위해 TV와 영화의 조금을 망치. 20 00:01:13,730 --> 00:01:16,170 그래서 여기있는 것과 같은 쇼를 지켜보고 때마다 21 00:01:16,170 --> 00:01:19,910 그리고 경찰은 "당신이 청소를 할 수 있습니까?"라고 또는 "개선" 22 00:01:19,910 --> 00:01:21,900 현실 세계에서 강화가 없습니다. 23 00:01:21,900 --> 00:01:25,220 사실, 당신이 정말로 얻을 것은 이와 같은 작은 선물입니다. 24 00:01:25,220 --> 00:01:27,570 나는 페이지에서 직원 사진 중 하나를 찾았습니다. 25 00:01:27,570 --> 00:01:30,980 이 포토샵이라는 프로그램입니다. 이 2 Bowdens의 1 26 00:01:30,980 --> 00:01:36,300 실제로 1 3의 Bowdens, 오늘, 우리는 로브와 폴과 함께뿐만 아니라 여기에 부인을 보덴이 때문입니다. 27 00:01:36,300 --> 00:01:41,950 하지만, 여기에 화면에 롭이며, 경우 그는 항상 그의 눈에 있었죠 그 반짝임에에 우리는 확대, 28 00:01:41,950 --> 00:01:47,600 만약 당신이 실제로는 보이지 것은 당신이보고하면 얻을 무엇이다. 29 00:01:47,600 --> 00:01:51,690 이 "강화"입니다이 "CSI"는 조금 잘못되어 있습니다. 30 00:01:51,690 --> 00:01:55,190 우리가 조금 더 "CSI"를 선택할 수있는 경우 다른 클립이있다. 31 00:01:55,190 --> 00:01:58,500 이 사람은 당신이 원하는 경우 금후 대단히 좋은 문구입니다 32 00:01:58,500 --> 00:02:10,280 정말, 당신은 아무것도 말을하지 할 때, 친구들과 기술적 소리. 33 00:02:10,280 --> 00:02:12,970 >> [남자] 주 동안 나는 택시 기사 살인 사건을 조사하고 한 34 00:02:12,970 --> 00:02:15,360 특정 병적 매력이 있습니다. 35 00:02:15,360 --> 00:02:17,160 [여자 # 1]이 실시간으로됩니다. 36 00:02:17,160 --> 00:02:22,930 [여자 # 2] 내가 IP 주소를 추적 할 수 있는지, Visual Basic을 사용하여 GUI 인터페이스를 만들 수 있습니다. 37 00:02:22,930 --> 00:02:29,570 >> [Malan] Visual Basic을 사용하여 GUI 인터페이스를 생성, 옆 동기화 그럼 오디오 38 00:02:29,570 --> 00:02:31,820 IP 주소를 추적하는 것은 전체 터무니없는 소리입니다. 39 00:02:31,820 --> 00:02:33,840 요즘 당신은 Visual Basic을 사용하지 않을 40 00:02:33,840 --> 00:02:38,920 거기에 GUI에 대한 필요가없고, IP​​ 주소는 기술적으로 정확한 용어했습니다. 41 00:02:38,920 --> 00:02:41,730 따라서 이것들을 지켜, 내 즐겨 찾기 중 하나 42 00:02:41,730 --> 00:02:45,070 당신이 다른 언어를 알 필요가 있기 때문에 하나는 좀 더 마법입니다. 43 00:02:45,070 --> 00:02:47,860 C.의 상위 집합입니다 오브젝티브-C라는 언어가 있어요 44 00:02:47,860 --> 00:02:51,960 어떤 사람들 객체 지향 프로그래밍 간의 그건 C 플러스 몇 가지 추가 기능을 의미합니다. 45 00:02:51,960 --> 00:02:55,070 그리고 애플은 iOS를 프로그래밍에 대한 대중화 것을 언어입니다. 46 00:02:55,070 --> 00:02:58,760 그리고 여기가 "숫자"에서, 모두 다른 쇼에서 반칙이에요 47 00:02:58,760 --> 00:03:02,450 당신이 실제로 바로 그 순간에서 티보 (TiVo) 및 일시 중지에 자세히 들여다 보면, 48 00:03:02,450 --> 00:03:07,700 당신은 그들이보고있는 것은별로 설명되는 무엇 것을 확인할 수 있습니다. 49 00:03:07,700 --> 00:03:11,170 그리고 내가 여기서 다른 오디오 커넥터를 시도하고 우리가 그럴 수 있는지 알려 50 00:03:11,170 --> 00:03:13,780 동기화에서 오디오이 시간을 유지. 51 00:03:13,780 --> 00:03:20,530 난 "숫자를."을 제공 52 00:03:20,530 --> 00:03:23,240 >> [남자 # 1]은 32 비트 IPv4 주소입니다. 53 00:03:23,240 --> 00:03:38,930 [남자 # 2] IP, 인터넷입니다. >> 개인 네트워크입니다. 이 아니타의 개인 네트워크입니다. 54 00:03:38,930 --> 00:03:43,810 [Malan] 좋아. 이 목표-C이며, 어떤 녀석 색칠 공부 프로그램입니다 55 00:03:43,810 --> 00:03:51,140 당신은 아마도 거기에 변수의 이름에서 추측 할 수 있습니다. 56 00:03:51,140 --> 00:03:54,410 그래서 그런 다음, "숫자"이었다. 우리는 소개 오늘 이번 주 그래서 57 00:03:54,410 --> 00:03:57,740 법의학 따라서 문제의 컨텍스트의 세계가 좀. 58 00:03:57,740 --> 00:04:00,590 여기에 특별한 이벤트가 있기 때문에 오늘은 간략 강의 될 것입니다 59 00:04:00,590 --> 00:04:05,530 이후, 우리는 학생들과 학부모 모두 오늘을 모두 들여다 봐도, 그리고 애타게합니다 60 00:04:05,530 --> 00:04:07,420 수평선에있는 몇 가지가 있습니다. 61 00:04:07,420 --> 00:04:12,240 그중 월요일로, 당신은 몇 친구들을 갖게됩니다. 62 00:04:12,240 --> 00:04:16,050 EdX, 하버드와 오픈 코스에 대한 MITs 새로운 온라인 사업 63 00:04:16,050 --> 00:04:19,120 더, 월요일에 하버드의 캠퍼스에서 시작됩니다. 64 00:04:19,120 --> 00:04:21,490 오는 월요일 의미는 당신이해야합니다 - 마지막으로 백작의 등 65 00:04:21,490 --> 00:04:26,210 86,000 추가 급우가 CS50의 강의와 함께 다음과 같은 될 것입니다 66 00:04:26,210 --> 00:04:29,170 그리고 섹션 및 연습 및 문제 세트. 67 00:04:29,170 --> 00:04:32,350 그리고이의 일환으로, 당신은의 창립 클래스의 멤버가됩니다 68 00:04:32,350 --> 00:04:35,090 CS50 지금 CS50x. 69 00:04:35,090 --> 00:04:39,310 >> 이 일환으로, 지금,뿐만 아니라 몇 가지 나름의​​ 매력이있을 것 알고 있습니다. 70 00:04:39,310 --> 00:04:43,790 학생들의 거대한 수에,이에 대한 준비를하기 위해, 71 00:04:43,790 --> 00:04:47,180 말하면 우리는 108 TFS와 인증 기관 (CA)을하더라도, 72 00:04:47,180 --> 00:04:50,790 별로 최고의 학생 / 교사 비율 우리가 80,000 다른 학생들을 누르되면. 73 00:04:50,790 --> 00:04:52,850 그래서 우리는 많은 문제를 등급 할 일은 없겠죠 수동으로 설정합니다. 74 00:04:52,850 --> 00:04:55,920 그럼 문제 세트에 이번 주에 소개가 CS50 확인 될 것입니다 75 00:04:55,920 --> 00:04:58,450 어플라이언스 명령 줄 유틸리티가 될 것입니다 어떤 76 00:04:58,450 --> 00:05:01,200 이 주말 나중에 업데이트하면 당신은 얻을 거라고, 77 00:05:01,200 --> 00:05:03,200 당신이 명령을 실행 할 수 있습니다,, 50을 확인 78 00:05:03,200 --> 00:05:06,500 자신의 pset에, 당신은 당신의 프로그램이 있는지 여부에 관해서 의견을 당할거야 79 00:05:06,500 --> 00:05:11,160 올바른 또는 잘못된 우리가 제공 한 다양한 디자인의 사양에 따라. 80 00:05:11,160 --> 00:05:13,580 그럼에 더 문제 세트 사양과 81 00:05:13,580 --> 00:05:17,240 CS50x 친구들도이를 사용합니다. 82 00:05:17,240 --> 00:05:19,230 >> 따라서 문제 세트 4 법의학에 대한 모든 것입니다. 83 00:05:19,230 --> 00:05:21,940 그리고이 곡은 진짜 생활 것들에서 영감을 얻었습니다 84 00:05:21,940 --> 00:05:24,620 제가 대학원에있을 상기했을 때, 내가 함께 잠시 동안 인턴 85 00:05:24,620 --> 00:05:28,650 미들 카운티의 지방 검사 사무실 법정 일을하고 86 00:05:28,650 --> 00:05:31,650 자신의 리드 법정 수사관과 함께, 그리고이에 달한다 87 00:05:31,650 --> 00:05:35,260 , 내가 몇 주의 과거를 언급 생각 질량 주 경찰이나 다른입니다 88 00:05:35,260 --> 00:05:39,000 에 올, 그들은 하드 드라이브 및 CD 및 플로피 디스크 등을 내려 것 89 00:05:39,000 --> 00:05:42,340 다음과 같은, 그리고는 법의학 사무소의 목표는 확인할 여부 90 00:05:42,340 --> 00:05:44,600 가 발생했습니다 또는 어떤 종류의 증거 아니 었습니다. 91 00:05:44,600 --> 00:05:48,010 이 특별 조사 단위이었고, 때문에 화이트 칼라 범죄 92 00:05:48,010 --> 00:05:52,350 그것은 범죄의 더 많은 염려이었는데 93 00:05:52,350 --> 00:05:55,990 디지털 미디어의 일부 종류를 포함하는 일이, 판명이 안 많은 사람들이 94 00:05:55,990 --> 00:05:59,370 라는 이메일 쓰기 "내가했다고합니다." 95 00:05:59,370 --> 00:06:03,290 꽤 자주 법의학 검색, 모든 많은 열매를 발견하지 못했어요 96 00:06:03,290 --> 00:06:05,850 때때로 사람들은 이와 같은 이메일을 작성합니다. 97 00:06:05,850 --> 00:06:08,490 그래서 때로는 노력을 보상했다. 98 00:06:08,490 --> 00:06:14,420 >> 그러나이 법정 pset까지 이끌어, 우리는 pset 4 그래픽 약간 소개됩니다. 99 00:06:14,420 --> 00:06:18,260 그래서 당신은 아마 부여, JPEG 파일, GIF를하고 요즘 같은이 일을 100 00:06:18,260 --> 00:06:21,640 하지만 당신이 정말로 그것에 대해 생각하면, 이미지, 훨씬 롭의 얼굴처럼 101 00:06:21,640 --> 00:06:24,430 점의 순서, 또는 픽셀로 모델링 할 수있다. 102 00:06:24,430 --> 00:06:26,680 이제 롭의 얼굴의 경우, 색상 모든 종류의이있어 103 00:06:26,680 --> 00:06:29,940 우리는, otherwide 픽셀로 알려진 개인 점을 볼 시작 104 00:06:29,940 --> 00:06:31,610 우리가 '확대 시작 105 00:06:31,610 --> 00:06:35,590 그러나 우리는 세상을 조금 단순화하고, 여기이 로브 것이라고 말한다면, 106 00:06:35,590 --> 00:06:40,560 검은 색과 흰색, 잘 대표 할 흑백으로 우리는 바이너리를 사용할 수 있습니다. 107 00:06:40,560 --> 00:06:44,960 그리고 우리가 바이너리를 사용하려고하는 경우, 1 또는 0, 우리는이 같은 이미지를 표현할 수 108 00:06:44,960 --> 00:06:51,970 비트의 패턴 롭의 웃는 얼굴의 : 11,000,011 나타냅니다 109 00:06:51,970 --> 00:06:55,160 흰색, 흰색, 검정, 검정, 검정, 검정, 흰색 흰색. 110 00:06:55,160 --> 00:06:59,290 그리고 그 화려한 사진에 대해 얘기를 시작하기 위해 다음 큰 도약 없습니다. 111 00:06:59,290 --> 00:07:01,920 당신은 페이스 북에서 볼 또는 디지털 카메라로 소요될 것으로 것들, 112 00:07:01,920 --> 00:07:04,730 하지만, 확실히, 그 색상에 관해서는, 당신은 더 많은 비트가 필요합니다. 113 00:07:04,730 --> 00:07:08,470 그리고 사진의 세계의 매우 일반적인, 안 1 비트 색상을 사용하는 것입니다 114 00:07:08,470 --> 00:07:12,730 이 제안하지만, 24 비트 컬러, 실제로는 색상 수백만을 곳.로 115 00:07:12,730 --> 00:07:15,430 그래서 우리는 롭의 눈에 확대했을 때의 경우에서와 같이, 116 00:07:15,430 --> 00:07:19,270 그 서로 다른 다채로운 가능성 수백만의 숫자했습니다. 117 00:07:19,270 --> 00:07:22,260 >> 그래서 우리는, 문제 세트 4뿐만 아니라 연습이를 소개합니다 118 00:07:22,260 --> 00:07:27,050 때문에 여기 금요일 강의의 일반적인 2시 반을 대신 3시 30 분에 오늘 할 것입니다. 119 00:07:27,050 --> 00:07:29,930 그러나 비디오는 평소처럼, 내일 온라인 될 것입니다. 120 00:07:29,930 --> 00:07:31,880 우리는 또한 다른 파일 형식을 소개합니다. 121 00:07:31,880 --> 00:07:34,150 그래서 의도적으로 처음에는 협박 보는 의미 122 00:07:34,150 --> 00:07:38,980 하지만이 C의 구조체에 대한 좀 설명서입니다. 123 00:07:38,980 --> 00:07:42,280 그것은 MS가 몇 년 전,이 형식을 보급하도록 도움을 밝혀 124 00:07:42,280 --> 00:07:46,630 비트 맵 파일 형식, BMP,이 슈퍼 단순라고 불리는 125 00:07:46,630 --> 00:07:50,390 오랫동안 사용 된 컬러 풀 한 그래픽 파일 형식 126 00:07:50,390 --> 00:07:53,640 때로는 여전히 데스크톱에 바탕 화면에. 127 00:07:53,640 --> 00:07:57,410 당신은 Windows XP와 언덕과 푸른 하늘로 생각한다면, 128 00:07:57,410 --> 00:08:00,660 그 일반적으로 BMP, 또는 비트 맵 이미지, 비트 맵했습니다 129 00:08:00,660 --> 00:08:03,340 사람들이 좀 더 복잡성을 가지고 있기 때문에 우리 재미 있습니다. 130 00:08:03,340 --> 00:08:05,640 은 0의 1의의 그리드와 같은 매우 간단한 게 아냐, 131 00:08:05,640 --> 00:08:10,680 대신, 당신은 파일의 시작 부분에 헤더 등이 있습니다. 132 00:08:10,680 --> 00:08:15,520 그래서 다른 말로,. bmp 파일 안에 공의와 1의의 전체 무리는, 133 00:08:15,520 --> 00:08:18,070 하지만 일부 추가 공의와 1의 거기에가 있습니다. 134 00:08:18,070 --> 00:08:21,450 그리고, 년 동안 당연한 우리가 아마 촬영 한 것이 밝혀 135 00:08:21,450 --> 00:08:27,040 . 문서 나. xls 또는. mp3 또는. MP4와 같은 파일 형식 136 00:08:27,040 --> 00:08:29,910 당신은 잘 알고 있다는 어떤 파일 형식. 137 00:08:29,910 --> 00:08:31,900 음, 심지어 파일 형식이어야한다는 것은 무슨 뜻입니까? 138 00:08:31,900 --> 00:08:35,740 하루의 끝에 있기 때문에 우리가 사용하는 이러한 파일은 모두가 단지 0 년대와 1의 139 00:08:35,740 --> 00:08:39,950 그리고 아마도 그 공의와 1의는 A, B, C, ASCII 또는 같은 통해를 나타냅니다 140 00:08:39,950 --> 00:08:42,030 하지만 하루의 끝을 통해, 단지 공의와 1의입니다. 141 00:08:42,030 --> 00:08:45,300 >> 그래서 인간은 종종 새로운 파일 형식을 발명하기로 결정 142 00:08:45,300 --> 00:08:49,420 그들은 비트의 패턴이 실제로 의미 무엇을 표준화 곳. 143 00:08:49,420 --> 00:08:52,790 그리고 여기이 경우에, 사람들이 비트 맵 파일 형식을 디자인 사람 144 00:08:52,790 --> 00:08:58,260 비트 맵 파일의 첫 바이트에 같은 오프셋 0으로 표시했다, 거기 145 00:08:58,260 --> 00:09:02,320 일부 cryptically라는라는 변수 bfType,이있을거야 146 00:09:02,320 --> 00:09:06,510 이는 단지 비트 맵 파일 형식을 의미,이 무엇인지 비트 맵 파일의 유형입니다. 147 00:09:06,510 --> 00:09:10,780 당신은 2 오프셋하는 두 번째 행, 바이트 2 번에서, 아마도 추측 할 수 148 00:09:10,780 --> 00:09:15,980 0의 1의 무엇을 대표하는 그 패턴이있다 고요? 149 00:09:15,980 --> 00:09:18,320 일의 크기, 그리고 거기에서 계속된다. 150 00:09:18,320 --> 00:09:20,660 따라서 문제 세트 4, 당신은이 물건들 중 일부를 정리 걸어됩니다. 151 00:09:20,660 --> 00:09:24,480 >> 우리는 모두에 대해 신경 결국,하지만 사실을 알 수 없습니다 그것은 흥미로운 시작 152 00:09:24,480 --> 00:09:30,780 선 또는 바이트 54, rgbtBlue, 녹색 및 빨간색에 걸쳐 다양하게 준비되어 있습니다. 153 00:09:30,780 --> 00:09:35,280 지금까지 약어 RGB, 빨강, 녹색 파랑을 들었습니다 있으면 해당에 대한 참조입니다. 154 00:09:35,280 --> 00:09:37,840 이 판명하기 때문에 당신은 무지개의 모든 색깔을 칠 수 있습니다 155 00:09:37,840 --> 00:09:41,580 빨강, 파랑, 녹색의 조합이 있습니다. 156 00:09:41,580 --> 00:09:46,560 그리고 사실, 방에있는 부모는 최초의 프로젝터의 일부를 기억 할 수 있습니다. 157 00:09:46,560 --> 00:09:49,360 요즘, 당신은 단지 한 밝은 빛이 렌즈에서 나오는 참조하십시오. 158 00:09:49,360 --> 00:09:52,870 그러나 다시 하루에, 당신은 빨간색 렌즈, 파란색 렌즈, 그리고 녹색 렌즈를 가지고 159 00:09:52,870 --> 00:09:56,620 함께 그들은 화면을 목표로하고 다채로운 사진을 맺었습니다. 160 00:09:56,620 --> 00:09:59,590 그리고 종종 중학교, 고등학교 이러한 렌즈를 것 161 00:09:59,590 --> 00:10:02,680 계속 그리 약간 비스듬히 있으므로, 더블 또는 트리플 이미지를보고 지내다가 162 00:10:02,680 --> 00:10:07,500 하지만 그게 생각 이었어요. 당신은 그림 빨간색과 녹색과 청색 빛을했습니다. 163 00:10:07,500 --> 00:10:09,570 그리고 같은 원리는 컴퓨터에서 사용됩니다. 164 00:10:09,570 --> 00:10:12,000 >> 그래서 도전 중, 그럼, 당신을위한 문제에서 4를 설정 165 00:10:12,000 --> 00:10:16,080 몇 가지가 될 것이다, 하나는 실제로 이미지 크기를 조정하는 것입니다. 166 00:10:16,080 --> 00:10:18,050 0의 1의의 패턴에 걸릴하기 위해, 167 00:10:18,050 --> 00:10:22,840 0의 1의의 덩어리는 구조의 어떤과 ​​같이 표현되는 알 168 00:10:22,840 --> 00:10:26,800 빨간색, 파란색, 녹색 : 다음 픽셀을 복제하는 방법을 알아내는 169 00:10:26,800 --> 00:10:32,460 그래서 내부 사진은 처음과 같은 경우 그 후 대신 이렇게 볼 수 있습니다. 170 00:10:32,460 --> 00:10:35,590 다른 도전 중, 너무, 당신이 전달됩니다 때문일 것입니다 171 00:10:35,590 --> 00:10:38,900 디지털 카메라에서 실제 파일의 법정 이미지 172 00:10:38,900 --> 00:10:42,410 그 카메라에, 옛날 옛적에, 사진의 전체 무리가 있었다. 173 00:10:42,410 --> 00:10:47,030 문제는, 우리가 실수 삭제하거나 이미지가 어떻게 든 손상했다합니다. 174 00:10:47,030 --> 00:10:51,040 나쁜 일들은 디지털 카메라로 발생하고, 그래서 우리는 신속하게 0의 1의 모든 복사 175 00:10:51,040 --> 00:10:55,410 에서 당신을 위해 그 카드를, 1 큰 파일에 모두 저장 한 후 우리는 당신에게주게 될것이다 176 00:10:55,410 --> 00:11:00,000 당신은 복구 할 수있는과 C에서 프로그램을 작성할 수 있도록 문제에서 4를 설정 177 00:11:00,000 --> 00:11:02,660 이러한 JPEG 파일의 모든 이상적. 178 00:11:02,660 --> 00:11:06,280 그리고, 그들은 다소 복잡한 파일 형식의 있는데도, 그 JPEG 파일을 변 179 00:11:06,280 --> 00:11:09,580 그들은 훨씬 더 복잡 여기이 웃는 얼굴보다하고 있습니다. 180 00:11:09,580 --> 00:11:14,320 이 모든 JPEG 0 년대와 1의 같은 패턴으로 시작을 이용할 수 있습니다. 181 00:11:14,320 --> 00:11:18,820 따라서 루프 또는 이와 유사한을위한 잠시 동안 루프 또는를 사용하여, 182 00:11:18,820 --> 00:11:22,350 당신은 모든 공의와 1의이 법정 이미지를 통해 반복 할 수 있습니다 183 00:11:22,350 --> 00:11:26,670 하고 문제 세트의 사양에 정의되어있는 특별한 패턴을 볼 때마다, 184 00:11:26,670 --> 00:11:29,770 당신은 매우 높은 확률로, '아, 여기, 생각할 수 185 00:11:29,770 --> 00:11:33,520 JPEG의 시작 '가능한 빨리 찾을 수와 같은 패턴, 186 00:11:33,520 --> 00:11:36,050 나중에 바이트 또는 킬로바이트 또는 메가 바이트 일부 번호, 187 00:11:36,050 --> 00:11:40,550 당신은 아 ', 가정 수 있습니다! 다음은 두 번째 JPEG, 나는 첫 번째 한 후 찍은 사진입니다. 188 00:11:40,550 --> 00:11:44,720 저 첫 번째 파일을 읽는 중지하자,이 새로운 하나를 쓰기 시작합니다. ' 189 00:11:44,720 --> 00:11:49,980 그리고 pset 4 프로그램의 출력은 많은 50 JPEG 파일 될 것입니다. 190 00:11:49,980 --> 00:11:52,400 나이가 50 JPEG 파일이 아니라면, 당신은 루프 약간 있습니다. 191 00:11:52,400 --> 00:11:55,580 당신은 JPEG 파일의 무한한 번호가있는 경우, 당신은 무한 루프를 갖추고 있습니다. 192 00:11:55,580 --> 00:11:58,280 그래서들도 꽤 일반적인 경우입니다. 193 00:11:58,280 --> 00:12:00,280 그 수평선에 어떤입니다. 194 00:12:00,280 --> 00:12:03,740 >> 우리 뒤에, 0 퀴즈. 실현, 이메일 당, 그게 늘 사람들이있어 195 00:12:03,740 --> 00:12:06,820 행복 중성의 종류, 그리고 퀴즈 주변 슬픈 영 시간이 모두 사람들이있는 것 같다. 196 00:12:06,820 --> 00:12:10,160 그리고 머리 TFS, Zamyla, 자신의 TF, 나에게 연락 바랍니다 197 00:12:10,160 --> 00:12:14,120 당신이 일을 택한 방법에 대해 논의하려는 경우 귀하가 알고있는 인증 기관 (CA) 또는 하나입니다. 198 00:12:14,120 --> 00:12:16,460 >> 그래서, 방에 여기 부모를 감동하는 199 00:12:16,460 --> 00:12:23,990 CS50 라이브러리는 무엇입니까? 잘 했어. 200 00:12:23,990 --> 00:12:32,280 CS50 라이브러리는 무엇입니까? 응? [학생 답변, 이해할 수없는] 201 00:12:32,280 --> 00:12:35,730 >> 그래, 좋아. 그래서 우리는 직원이 작성하는 코드의 prewritten 세트예요 202 00:12:35,730 --> 00:12:38,460 우리는 몇 가지 일반적인 기능을 제공하기 위해, 여러분에게 제공합니다. 203 00:12:38,460 --> 00:12:42,290 여기에 나와있는 모든 기능, 나에게 정수를, 나에게 문자열을 좋아 소식입니다. 204 00:12:42,290 --> 00:12:45,260 지금부터는 우리가 정말 이러한 훈련 바퀴를 벗을 시작합니다. 205 00:12:45,260 --> 00:12:48,230 그래서 우리는, 귀하의 "문자열"을 멀리하기 시작 할거야 206 00:12:48,230 --> 00:12:52,790 하는 리콜, 왜 실제 데이터 유형에 대해 단지 동의어 였어요? 숯불 *. 207 00:12:52,790 --> 00:12:57,020 따라서 부모, 그건 아마도 - 그래서, 그래서 숯불 * 우리는 확인할 수 있습니다 208 00:12:57,020 --> 00:13:00,810 화면에 표시되는 모든 우리의 어휘에서 "문자열을"제거로 더 209 00:13:00,810 --> 00:13:02,760 실제로 코드를 작성하는에 제공 적어도 때. 210 00:13:02,760 --> 00:13:06,240 마찬가지로, 우리는만큼 이러한 기능 중 일부를 사용을 중지합니다 211 00:13:06,240 --> 00:13:08,390 우리의 프로그램은 더 정교 얻을 수 있기 때문에 212 00:13:08,390 --> 00:13:11,370 보다는, 그냥 프롬프트 점멸과 함께 앉아 프로그램을 작성 213 00:13:11,370 --> 00:13:13,580 인치 무언가를 입력 할 사용자에 대한 대기 214 00:13:13,580 --> 00:13:15,220 당신은 다른 곳에서 입력을받을 수 있습니다. 215 00:13:15,220 --> 00:13:18,720 예를 들어, 로컬 하드 드라이브에 비트 일련의에서 그들을 얻을 수 있습니다. 216 00:13:18,720 --> 00:13:23,340 대신 일부 웹 사이트 어디 선가, 네트워크 연결에서 미래에 그들은 잡을거야. 217 00:13:23,340 --> 00:13:27,460 그래서 처음으로 돌아 계층 껍질을 벗기면의하자, 그리고 CS50 기기를 당겨 218 00:13:27,460 --> 00:13:32,300 당신이 주를 포함 날카로운했던 CS50.h 전화이 파일. 219 00:13:32,300 --> 00:13:34,380 >> 그러나의 사실이 안에 뭐가 보자. 220 00:13:34,380 --> 00:13:38,250 그럼 파란색으로 파일의 상단, 그냥 코멘트를 왕창입니다 221 00:13:38,250 --> 00:13:41,340 보증 정보 및 라이센스. 이 일반적인 패러다임의 일종입니다 222 00:13:41,340 --> 00:13:44,600 소프트웨어에 있기 때문에 소프트웨어의 많은 이러한 일 "오픈 소스"라는거야 223 00:13:44,600 --> 00:13:46,940 어떤 사람이 코드를 작성했습니다 것을 의미합니다 224 00:13:46,940 --> 00:13:50,060 그리고, 단지 실행하고 사용하는이 자유롭게 이용할 수 225 00:13:50,060 --> 00:13:53,660 하지만 실제로 읽고 변경하고 자신의 작품에 통합 할 수 있습니다. 226 00:13:53,660 --> 00:13:55,790 수 있도록, 당신이 오픈 소스 소프트웨어를 사용했던 거예요 227 00:13:55,790 --> 00:13:58,030 매우 작은 형태에도 불구하고. 228 00:13:58,030 --> 00:14:01,860 나는 코멘트를지나 아래로 스크롤하면,하지만, 우리는 좀 더 친숙한 것을 확인할 수 있습니다. 229 00:14:01,860 --> 00:14:08,090 따라서 CS50.h 파일이 헤더 파일의 전체 많이 포함되어 여기 상단에있는 확인합니다. 230 00:14:08,090 --> 00:14:11,160 지금, 이들의 대부분은 우리가 전에 보지,하지만 그 중 하나는 231 00:14:11,160 --> 00:14:15,640 익숙한,이 중 어떤 우리가 지금까지, 짧게이라도 본 적 있어요? 232 00:14:15,640 --> 00:14:18,720 네, 표준 라이브러리. Stdlib.h는 malloc이 233 00:14:18,720 --> 00:14:21,590 일단 우리는 동적 메모리 할당에 대해 얘기하기 시작 234 00:14:21,590 --> 00:14:24,960 우리는뿐만 아니라 다음 주에 돌아 오면되는, 우리는 그 파일을 포함 시작했다. 235 00:14:24,960 --> 00:14:29,660 이 BOOL와 TRUE와 FALSE 것은 사실 이라기보다는, C에 존재하지 않는 것이 밝혀졌다 236 00:14:29,660 --> 00:14:32,460 여기이 파일을 포함하지 않는 한. 237 00:14:32,460 --> 00:14:35,770 그래서 우리는, 주, 표준 bool.h을 포함 된 238 00:14:35,770 --> 00:14:39,020 당신은의, BOOL true 또는 false를 반환합니다. 개념을 사용할 수 있도록 239 00:14:39,020 --> 00:14:41,830 이 없으면, 당신은 가짜 그것을 정렬하여 정수를 사용해야 240 00:14:41,830 --> 00:14:45,920 불과 임의로 0 거짓 1에 해당하는 것으로 가정합니다. 241 00:14:45,920 --> 00:14:49,980 >> 이제 우리는 더 아래로 스크롤하면, 여기 문자열의 우리의 정의입니다. 242 00:14:49,980 --> 00:14:54,820 그것은이 *가있는 곳 정말 중요하지 않습니다, 우리가 전에 말했듯이, 밝혀졌다. 243 00:14:54,820 --> 00:14:56,750 당신은 모든 주위 공간을 가질 수 있습니다. 244 00:14:56,750 --> 00:15:01,550 저희 이번 학기는 *는 유형과해야한다고 명확하게이로 추진되었습니다. 245 00:15:01,550 --> 00:15:05,370 그러나 좀 더 일반적인하지 않을 경우, 거기에 뒀을 것입니다, 단지와 같은 일반적인, 실현 246 00:15:05,370 --> 00:15:07,480 하지만 기능적으로는 같은 일입니다. 247 00:15:07,480 --> 00:15:11,070 우리가 더 아래로 읽으면 그러나 지금, 우리의 말을 살펴, GetInt을 봅시다 248 00:15:11,070 --> 00:15:15,350 우리는 무엇 이번 학기 전에, 아마도 그 사용 때문입니다. 249 00:15:15,350 --> 00:15:19,620 여기 GetInt입니다. 이 무엇입니까? 250 00:15:19,620 --> 00:15:24,650 이 프로토 타입입니다. 너무 자주, 우리는 우리의의 정상에 프로토 타입을 넣어했습니다. C 파일은, 251 00:15:24,650 --> 00:15:28,190 뿐만 아니라 헤더 파일. h 파일에 프로토 타입을 넣을 수 있습니다 252 00:15:28,190 --> 00:15:32,110 여기이 같은, 그래서 당신은 몇 가지 기능을 쓸 때 253 00:15:32,110 --> 00:15:36,790 당신은 다른 사람들이 사용할 수 있도록하려는, 즉, CS50 라이브러리와 정확히 같은 경우가 있습니다 254 00:15:36,790 --> 00:15:40,900 당신은 CS50.c 같은 귀하의 기능을 구현뿐만 아니라 255 00:15:40,900 --> 00:15:46,720 당신은 또한 안 파일의 상단에있는 프로토 타입을 넣어하지만 헤더 파일의 상단에있는 256 00:15:46,720 --> 00:15:50,810 해당 헤더 파일은, 친구, 동료 등이 무슨 257 00:15:50,810 --> 00:15:52,800 날카로운와 함께 자신의 코드에 포함되어 있습니다. 258 00:15:52,800 --> 00:15:55,440 항상 그래서 당신은 당신의이 프로토 타입의 모든 포함 된 것 259 00:15:55,440 --> 00:15:59,870 효율적으로 파일의 상단에,이 날카로운 의해 메커니즘을 포함 260 00:15:59,870 --> 00:16:03,320 그 본질적 사본 및 페이스트 자신에이 파일을 만듭니다. 261 00:16:03,320 --> 00:16:06,400 자, 여기 몇 가지 매우 자세한 설명서입니다. 262 00:16:06,400 --> 00:16:08,880 >> GetInt은 정수를 얻을 수 있다는 당연한 우리는 꽤 많이 촬영 한 263 00:16:08,880 --> 00:16:10,740 일부 코너 경우가 뽑는하지만, 권리를 변? 264 00:16:10,740 --> 00:16:14,320 어떤 방법이 너무 큰 수의 사용자가 형식면? 265 00:16:14,320 --> 00:16:17,350 단지 정수의 내부에 맞지 않을 수있는 quintillion? 266 00:16:17,350 --> 00:16:21,180 예상 행동은 무엇입니까? 음, 이상적으로, 그것은 예측입니다. 267 00:16:21,180 --> 00:16:23,460 따라서이 경우에는, 사실의 작은 글씨도 읽을수 경우 268 00:16:23,460 --> 00:16:27,850 그 라인을 읽을 수없는 경우,이 반품 INT_MAX를 볼 수 있습니다. 269 00:16:27,850 --> 00:16:30,800 우리는이 얘기는하지 있지만 대문자에 따라 적 270 00:16:30,800 --> 00:16:33,030 아마도, 무엇입니까? 271 00:16:33,030 --> 00:16:36,610 이 상수이고, 그래서 아마도 선언있어 특별한 상수입니다 272 00:16:36,610 --> 00:16:39,460 파일에 높게 해당 헤더 파일 중 하나에서, 273 00:16:39,460 --> 00:16:43,400 그리고 INT_MAX는 아마 2000000000, 약 같은 일입니다. 274 00:16:43,400 --> 00:16:48,160 우리가 어떻게 든 무언가를 의미해야하기 때문에 있다는 생각은 잘못 갔다 275 00:16:48,160 --> 00:16:51,090 우리는, 그래, 우리의 처분 4,000,000,000 번호가 276 00:16:51,090 --> 00:16:53,980 최대 2 억에 부정적인 2,000,000,000은 어림 잡아서. 277 00:16:53,980 --> 00:16:58,030 음, 프로그래밍에서 자주 발생하면 단지 그 숫자 중 하나를 훔쳐입니다. 278 00:16:58,030 --> 00:17:02,250 아마 0, 어쩌면 2000000000, 아마도 부정적인 2000000000. 279 00:17:02,250 --> 00:17:06,720 당신이 세계에 커밋 할 수 있도록 당신이 수있는 값 중 하나를 지출 280 00:17:06,720 --> 00:17:10,089 뭔가 일이 잘못되면 즉,이 슈퍼 - 큰 값을 반환합니다. 281 00:17:10,089 --> 00:17:13,329 하지만 당신은 사용자가 같은 암호화 된 것을 입력하지 않으 "4, 2, 3을 ..." 282 00:17:13,329 --> 00:17:17,079 정말 큰 숫자, 어디를 상수로 대신 일반화. 283 00:17:17,079 --> 00:17:19,380 그럼 정말 당신은 지난 몇 주 항문 군다 경우, 284 00:17:19,380 --> 00:17:23,800 당신이 GetInt 전화 때마다, 당신은 경우 조건을 확인되었을 것입니다. 285 00:17:23,800 --> 00:17:27,109 , 또는 좀 더 구체적으로 INT_MAX에 사용자 유형을 했습니까 286 00:17:27,109 --> 00:17:29,900 GetInt 반환 INT_MAX에게나요? 때문에 그랬다면, 287 00:17:29,900 --> 00:17:35,140 그 사실은 그들이 입력하지 않은 의미한다 뭔가가이 경우에 문제가 발생했습니다. 288 00:17:35,140 --> 00:17:38,970 그래서 일반적으로 그냥 특별한 의미는 "센티넬"값로 알려진 곳입니다. 289 00:17:38,970 --> 00:17:41,020 >> 자, 이제. C 파일에 설정 보자. 290 00:17:41,020 --> 00:17:44,500 C 파일은 얼마 동안 어플라이언스에 존재하고 있습니다 291 00:17:44,500 --> 00:17:47,540 그리고 사실 어플라이언스는 당신이 미리 컴파일 있습니다 292 00:17:47,540 --> 00:17:49,720 그곳으로 우리는 "목적 코드"라는 293 00:17:49,720 --> 00:17:52,940 시스템이 알고 있기 때문입니다하지만 당신에게 중요하지 않습니다, 294 00:17:52,940 --> 00:17:54,780 이 경우, 거기가 어딘지 어플라이언스. 295 00:17:54,780 --> 00:18:00,620 그러나가 GetInt하려면 지금 아래로 스크롤하게하고, GetInt이 모든 시간을 작업 한 방식을 볼 수 있습니다. 296 00:18:00,620 --> 00:18:02,380 그래서 여기에 우리가 이전의 유사한 의견이 있습니다. 297 00:18:02,380 --> 00:18:04,930 난 그냥 코드 부분에 확대하자, 298 00:18:04,930 --> 00:18:07,410 그리고 우리가 GetInt에 대해이 것은 다음과 같습니다. 299 00:18:07,410 --> 00:18:12,770 (TRUE), 그래서 우리는 의도적으로 무한 루프를하는 동안은 아무 입력도지지 않습니다하며 정수를 반환 300 00:18:12,770 --> 00:18:16,560 그러나, 아마, 우리는 어떻게 든이 탈옥, 또는 내에서 반환합니다. 301 00:18:16,560 --> 00:18:19,890 그럼 어떻게이 작품을 보자. 음, 우리는 GetString을 사용하는 것 같습니다 302 00:18:19,890 --> 00:18:22,550 루프, 166 내부의 첫 줄 인치 303 00:18:22,550 --> 00:18:25,320 이 지금은 좋은 연습 때문 어떤 상황에서 304 00:18:25,320 --> 00:18:30,820 GetString는이 특별한 키워드 NULL을 반환 할 수? 305 00:18:30,820 --> 00:18:38,460 뭔가 잘못되면. 당신은 GetString 같은 것을 호출 할 때 잘못이 있겠 어? 306 00:18:38,460 --> 00:18:42,550 응? [학생 답 이해할 수없는] >> 그래. 그래서 아마 malloc이 실패합니다. 307 00:18:42,550 --> 00:18:45,310 어딘가에 후드 GetString 아래에, malloc를 호출합니다 308 00:18:45,310 --> 00:18:48,210 이는 컴퓨터 가게 할 수 있습니다하는 메모리를 할당 309 00:18:48,210 --> 00:18:50,950 문자 모두 키보드로 사용자 유형입니다. 310 00:18:50,950 --> 00:18:53,270 그리고 사용자가 무료로 많은 시간을 가지고 가정 311 00:18:53,270 --> 00:18:56,470 그리고 2,000,000,000 문자보다 예를 들어, 더 많은 입력. 312 00:18:56,470 --> 00:18:59,600 컴퓨터보다 더 많은 문자는 RAM이 있습니다. 313 00:18:59,600 --> 00:19:02,350 음, GetString, 당신에게 그걸 의미 할 수있다 314 00:19:02,350 --> 00:19:05,650 이 슈퍼, 슈퍼 드문 코너 케이스 인 경우에도 마찬가지입니다. 315 00:19:05,650 --> 00:19:08,490 그것은 어떻게 든이 문제를 해결할 수 있어야한다, 그래서 GetString 316 00:19:08,490 --> 00:19:11,850 우리가 돌​​아 가서 그 문서를 읽을 경우, 실제로 NULL을 반환 않습니다. 317 00:19:11,850 --> 00:19:16,150 GetString는 NULL을 반환하여 실패 지금 경우, GetInt는 실패 할 것이다 318 00:19:16,150 --> 00:19:19,370 단지 파수꾼으로 INT_MAX을 반환하여. 319 00:19:19,370 --> 00:19:22,650 이것들은 인간의 관례입니다. 이를 알고있는 유일한 방법은 경우가 있습니다 320 00:19:22,650 --> 00:19:24,840 문서를 읽는 것입니다. 321 00:19:24,840 --> 00:19:28,200 그러니 INT 실제로 GotInt있는 곳까지 아래로 스크롤 보자. 322 00:19:28,200 --> 00:19:34,220 >> 내가 좀 더 아래로 스크롤다면, 라인 170에서 우리는이 라인 위에 의견이 있습니다. 323 00:19:34,220 --> 00:19:38,470 그래서 우리는, 172에서 정수 N과 숯불 C, 다음이 새로운 기능을 선언 324 00:19:38,470 --> 00:19:41,870 둘 중에 일부는 이전에 발견 했소하지만, sscanf 있습니다. 325 00:19:41,870 --> 00:19:44,190 이 문자열 스캔 F을 의미합니다. 326 00:19:44,190 --> 00:19:48,580 즉, 나에게 문자열을 제공하고 관심 정보의 조각을 위해 스캔합니다. 327 00:19:48,580 --> 00:19:53,820 그러니까 무슨 뜻 이죠? 글쎄, 나는 키보드 1 2 3 그대로 입력했다고 가정 328 00:19:53,820 --> 00:19:59,730 를 입력 한 다음 Enter를 누르십시오. GetString에 의해 반환 1 2 3의 데이터 유형은 무엇입니까? 329 00:19:59,730 --> 00:20:05,010 그것은 바로, 분명히 문자열거야? 나는 문자열을 가지고 있으므로 1 2 3는 "1 2 3"입니다 330 00:20:05,010 --> 00:20:07,260 그것의 끝에 \ 0. 그 정수가 아닙니다. 331 00:20:07,260 --> 00:20:10,420 그은 (는) 숫자가 아닙니다입니다. 이 숫자처럼 보이지만 사실은 없습니다. 332 00:20:10,420 --> 00:20:14,680 그래서 GetInt이 짓을 했을까? 그것은 왼쪽에서 오른쪽으로 해당 문자열을 스캔하는 333 00:20:14,680 --> 00:20:19,010 1 2 3 \ 0 든은 실제 정수로 변환합니다. 334 00:20:19,010 --> 00:20:21,010 지금, 당신은이 작업을 수행하는 방법을 알아 내기 수 있습니다. 335 00:20:21,010 --> 00:20:24,240 당신이 pset 2 다시 생각한다면, 당신은 아마 약간 편한 옷으로 갈아 입고 336 00:20:24,240 --> 00:20:26,810 시저 또는 vigenere에 따라서는 문자열을 통해 반복 할 수 있습니다 337 00:20:26,810 --> 00:20:29,800 당신은 픽업과 ints로 문자를 변환 할 수 있습니다. 일이 많이 기록이다. 338 00:20:29,800 --> 00:20:32,800 왜 당신을 위해 그렇게하지 ​​sscanf와 같은 함수를 호출하지? 339 00:20:32,800 --> 00:20:37,520 따라서 sscanf는 문자열 라인이라는이 경우에 인수가 필요합니다. 340 00:20:37,520 --> 00:20:41,310 그런 다음, 따옴표, printf와 매우 유사 지정 341 00:20:41,310 --> 00:20:44,960 이 문자열에 표시 뭘 기대합니까? 342 00:20:44,960 --> 00:20:52,980 내가 여기서 말은, 이제 10 진수와 어쩌면 문자를 볼 것으로 기대합니다. 343 00:20:52,980 --> 00:20:54,990 이 단지 한 순간의 경우 이유를 우리는 볼 수 있습니다. 344 00:20:54,990 --> 00:20:58,440 그것은이 표기법 지금 물건을 연상 것이 밝혀 345 00:20:58,440 --> 00:21:00,840 우리는 일주 전 얘기를 시작했다. 346 00:21:00,840 --> 00:21:05,430 >> 무엇입니까 & N과 & C 우리를 여기서 뭐하는거야? [학생 답변, 이해할 수없는] 347 00:21:05,430 --> 00:21:07,610 >> 그래. 그것은 나에게 C의 N과 주소의 주소를주고 있어요. 348 00:21:07,610 --> 00:21:10,440 지금, 왜 중요 하냐고? 글쎄, 당신은 알 C의 기능을 가진 349 00:21:10,440 --> 00:21:13,440 당신은 항상 모든에서 값 또는 값 없음을 반환 할 수 있습니다. 350 00:21:13,440 --> 00:21:16,630 당신은 정수, 문자열, 부동, 숯불, 뭐든지을 반환 할 수 있습니다. 351 00:21:16,630 --> 00:21:21,150 또는 무효를 반환 할 수 있지만, 만 maximally 한 일을 반환 할 수 있습니다. 352 00:21:21,150 --> 00:21:26,100 하지만 여기 우리는 sscanf는 어쩌면 정수, 10 진수를, 저를 반환 할 353 00:21:26,100 --> 00:21:29,240 또한 숯, 나는 순간에 왜 숯불을 설명 할 것이다. 354 00:21:29,240 --> 00:21:34,250 그럼 당신은 효과적으로 F 2 일을 반환 할, 그 C.에 단지 수 없습니다 355 00:21:34,250 --> 00:21:38,460 그래서 2 주소에 전달하여 해당 문제를 해결할 수 356 00:21:38,460 --> 00:21:43,710 당신이 함수에게이 주소를 건네 자마자, 그 기능은 그들과 함께 무엇을 할 수 있기 때문에? 357 00:21:43,710 --> 00:21:49,880 이 해당 주소로 쓸 수 있습니다. 당신은 * 작업을 사용하여 해당 주소의 각 "이 이동 '할 수 있습니다. 358 00:21:49,880 --> 00:21:54,320 그것은이 백도어 메커니즘의 일종이지만, 변수의 값을 변경하기위한 매우 일반적인 359 00:21:54,320 --> 00:21:58,020 이 경우 2 단 1 곳 이상 인치 360 00:21:58,020 --> 00:22:04,590 자, 내가 == to1을 확인하고 그 사실을 true로 평가 않는 경우 n을 돌아가는거야 확인합니다. 361 00:22:04,590 --> 00:22:09,340 그래서 무슨 일이에요? 음, 엄밀히 말하면, 우리가 GetInt으로 발생하려는 모든이 있습니다. 362 00:22:09,340 --> 00:22:12,340 우리는 말하자면, 구문 분석 할, 우리는 문자열을 읽을 수 있습니다 363 00:22:12,340 --> 00:22:16,210 "1 2 3"과 거기에 숫자가 같은데하면, 364 00:22:16,210 --> 00:22:21,360 우리가해야 할 sscanf에 알리는 것은 나를 위해이 변수 N에서 해당 번호 1 2 3을 넣어 것입니다. 365 00:22:21,360 --> 00:22:26,060 왜 다음, 나는뿐만 아니라이 있었나요? 366 00:22:26,060 --> 00:22:33,750 또한, sscanf, 여러분은 또한 여기에 문자를 수도라고의 역할은 무엇입니까. 367 00:22:33,750 --> 00:22:36,890 [학생 연설, 이해할 수없는] >>되지 않음 - 소수점 일 수 있습니다. 368 00:22:36,890 --> 00:22:40,650 잠시 생각하는가 개최 보자. 또 뭐가 있지? 369 00:22:40,650 --> 00:22:42,570 [학생이 이해할 수없는] >> 그럼, 좋은 생각, 그것은 NULL 문자가 될 수 있습니다. 370 00:22:42,570 --> 00:22:44,970 그것은이 경우, 실제로 없습니다. 응? [학생, 이해할 수없는] 371 00:22:44,970 --> 00:22:47,100 >> >> ASCII. 아니면, 제가 더욱 일반화 보자. 372 00:22:47,100 --> 00:22:49,670 이 %의 C는 오류 검사를위한 것입니다. 373 00:22:49,670 --> 00:22:52,510 우리는 숫자 뒤에 문자가있을하지 않으 374 00:22:52,510 --> 00:22:54,980 하지만이 내가 어떻게 할 수는 다음과 같습니다 375 00:22:54,980 --> 00:23:01,270 그렇게 sscanf 여기이 예제에서, N과 C의 값을 저장 게다가, 밝혀 376 00:23:01,270 --> 00:23:08,170 이 또한 변수의 수를 반환합니다 않습니다 어떻게하면 인치 값을 입력 377 00:23:08,170 --> 00:23:13,330 만 다음 1 2 3 입력다면 만 % d는 일치하는 것이다 378 00:23:13,330 --> 00:23:18,830 만 N은 1 2 3 같은 값으로 저장됩니다 아무것도는 C에 넣어없는거야; 379 00:23:18,830 --> 00:23:20,870 C는 말하자면, 쓰레기 값이 남아 있습니다. 380 00:23:20,870 --> 00:23:23,550 그 어떤 값으로 초기화 된 적이 없습니다 쓰레기 때문입니다. 381 00:23:23,550 --> 00:23:29,390 내가 그 포인터 중 하나를 입력하기 때문에, 그렇다면, sscanf는 1을 반환 382 00:23:29,390 --> 00:23:33,650 이 경우에, 좋아. 나는 정수를 가지고 그래서 메모리를 확보하기 위해 줄을 해방 383 00:23:33,650 --> 00:23:37,150 그 GetString는 실제로 할당, 그럼 내가 n을 반환합니다. 384 00:23:37,150 --> 00:23:42,210 그 시도 위치를 궁금해 본 적 있다면 다른, 진술의 출처, 여기에서 비롯됩니다. 385 00:23:42,210 --> 00:23:45,770 경우, 대조적으로, 전 1 2 3 foo는 입력 386 00:23:45,770 --> 00:23:48,640 텍스트 그냥 무작위 순서, sscanf는 볼 것입니다 387 00:23:48,640 --> 00:23:51,500 f를 - 우, 우,, 번호를 번호를 우, 번호를 우. 388 00:23:51,500 --> 00:23:54,190 그리고 N에 1 2 3 줄거야. 389 00:23:54,190 --> 00:23:59,970 그것은 C에서 F를 넣은 다음 2 반환하는거야. 390 00:23:59,970 --> 00:24:02,980 그래서 우리는 단지 scanf의 행동의 기본 정의를 사용하여이 391 00:24:02,980 --> 00:24:06,170 매우 간단한 방법 - 아, 처음 보면 복잡하지만, 하루의 끝에서, 392 00:24:06,170 --> 00:24:11,460 의 뜻을 간단 메카니즘은이 정수이며,이 경우입니다 제가 찾은 유일한? 393 00:24:11,460 --> 00:24:14,950 여기 흰 공간은 의도적 인 것입니다. 당신은 sscanf에 대한 문서를 읽는다면 394 00:24:14,950 --> 00:24:18,690 그것은 당신이 시작 또는 끝 부분에 공백의 일부를 포함하는 경우를 알려줍니다 395 00:24:18,690 --> 00:24:24,990 sscanf도 스페이스 바를 1 2 3 치, 무슨 이유에 대해 사용자를 허용하며, 그 합법적 인 것입니다. 396 00:24:24,990 --> 00:24:28,310 가 시작이나 끝 부분에 스페이스 바를 누르 단지 때문에, 사용자 소리 치지 않습니다 397 00:24:28,310 --> 00:24:32,160 이는 사용자 친화적 단지 조금 더 있습니다. 398 00:24:32,160 --> 00:24:34,160 >> 질문, 다음, GetInts에? 응? 399 00:24:34,160 --> 00:24:36,820 [학생 질문 이해할 수없는] 400 00:24:36,820 --> 00:24:40,740 >> 좋은 질문입니다. 당신이 방금 문자를 입력하는 경우, F, 및 인기처럼 입력 한 내용 401 00:24:40,740 --> 00:24:47,830 어느 1 2 3을 입력하지 않고, 당신은이 코드 라인의 동작이 다음 것 어떻게 생각하세요? 402 00:24:47,830 --> 00:24:50,500 따라서 sscanf가 너무 그를 커버 할 수있는 경우에 속하기 때문이다 403 00:24:50,500 --> 00:24:56,280 이 n 또는 C를 작성하지 않을거야, 그 대신 0을 반환하는거야. 404 00:24:56,280 --> 00:25:01,540 내가 원하는 건 예상 값이 1이기 때문에이 경우, 나는 또한 그 시나리오를 타야 해요. 405 00:25:01,540 --> 00:25:07,310 난 겨우 12를 원한다, 그리고 단 1 건을 기입 할 수 있습니다. 좋은 질문입니다. 기타? 406 00:25:07,310 --> 00:25:09,610 >> 좋아요, 그럼 여기에 모든 기능을 통과하지 말자, 407 00:25:09,610 --> 00:25:11,820 하지만 남은 관심, 아마도이 될 것 같습니다 한 408 00:25:11,820 --> 00:25:14,530 가 판명 때문에 GetString되는 GetFloat, GetInt, 409 00:25:14,530 --> 00:25:19,490 모든 펀트에게 GetString에 대한 그들의 기능을 많이 GetLongLong, GetDouble. 410 00:25:19,490 --> 00:25:22,860 그럼 그가 여기 구현하는 방법을 살펴 보자. 411 00:25:22,860 --> 00:25:27,040 이 녀석은 좀 복잡한 보여도 같은 기본을 사용합니다 412 00:25:27,040 --> 00:25:29,680 우리가 지난 주에 대해 얘기하기 시작하는. 따라서 GetString에 413 00:25:29,680 --> 00:25:32,670 그 때문에 여기까지 무효에 따라 더 주장을지지 않습니다 414 00:25:32,670 --> 00:25:37,110 그리고 문자열을 반환합니다, 그래서 버퍼라는 문자열을 선언하고 있습니다. 415 00:25:37,110 --> 00:25:39,670 정말 그 아직 사용 할 무슨 모르지만, 우리는 볼 수 있습니다. 416 00:25:39,670 --> 00:25:42,950 용량 같은 외모는 기본, 0으로이다;이가는 곳 확실치 않습니다. 417 00:25:42,950 --> 00:25:44,920 Not n은 아직 사용 할 무슨 일이 있는지 확인하십시오. 418 00:25:44,920 --> 00:25:47,860 그러나 지금은, 그래서 라인 243에 조금 더 흥미로운지고 있어요 419 00:25:47,860 --> 00:25:51,760 우리는 정수 C,이 바보 같은 세부의 일종입니다 선언합니다. 420 00:25:51,760 --> 00:25:58,080 문자는 8 비트이며, 8 비트 얼마나 많은 다른 값을 저장할 수 있습니까? 421 00:25:58,080 --> 00:26:03,310 256. 당신은 서로 다른 256 개의 ASCII 문자를하려는 경우 문제는, 422 00:26:03,310 --> 00:26:06,210 어떤이 다시 생각하면 있으며,이 암기 할 일이 아닙니다. 423 00:26:06,210 --> 00:26:09,100 당신이 큰 ASCII 차트로 생각한다면 우리는 주 전에 있었는데 424 00:26:09,100 --> 00:26:13,780 이 경우, 128 또는 256 ASCII 문자에있었습니다. 425 00:26:13,780 --> 00:26:16,220 우리 모두 0의의 패턴과 1 일이에요를 사용했습니다. 426 00:26:16,220 --> 00:26:19,410 오류가 감지 할 수 있도록하려는 경우 그 문제가 있습니다. 427 00:26:19,410 --> 00:26:23,290 이미 문자 256 값을 사용하는 경우 때문에, 428 00:26:23,290 --> 00:26:26,390 지금 당신은 말하는 방법이 없기 때문에 당신은 정말로, 미리 계획하지 않은 429 00:26:26,390 --> 00:26:29,750 "이 합법적 문자입니다,이 몇 가지 잘못된 메시지입니다." 430 00:26:29,750 --> 00:26:32,430 그래서이 세상이 수행 것은, 그들이 다음 큰 값을 사용, 431 00:26:32,430 --> 00:26:35,790 정수와 같은 당신은 비트 미친 번호가 있도록, 432 00:26:35,790 --> 00:26:39,610 4000000000 가능한 값 32이 있도록 간단하게 사용하여 끝낼 수 있습니다 433 00:26:39,610 --> 00:26:44,800 본질적으로, 그 중 257은, 1 중 오류 같은 일부 특별한 의미가 있습니다. 434 00:26:44,800 --> 00:26:49,190 >> 그럼 어떻게이 작품을 보자. 라인 246에,이 큰 동안 루프를 가지고 435 00:26:49,190 --> 00:26:54,530 그 fgetc를 호출되며 다음에 f 의미 파일, getc, 그리고 표준 입력. 436 00:26:54,530 --> 00:26:59,030 이 말은의 더 정확한 방법입니다 알고 보니 '키보드로부터의 입력을 읽어보십시오. " 437 00:26:59,030 --> 00:27:02,730 표준 입력 수단 키보드, 표준 출력, 화면을 의미합니다 438 00:27:02,730 --> 00:27:06,920 그리고 우리가 pset 4 볼 표준 오류가,,, 화면을 의미합니다 439 00:27:06,920 --> 00:27:09,670 그러나 그 화면의 특별한 부분을 conflated 않아 있도록 440 00:27:09,670 --> 00:27:13,760 인쇄 할 의도 한 실제 출력,하지만 미래에 그에 대한 자세한. 441 00:27:13,760 --> 00:27:19,430 그럼 fgetc는 키보드에서 한 문자를 읽어, 그리고 어디에를 저장할 의미? 442 00:27:19,430 --> 00:27:24,000 C에 저장 한 다음 확인, 그래서 제가 여기 몇 가지 논리 접속사를 사용, 443 00:27:24,000 --> 00:27:28,430 이 N 있으므로, 사용자가 입력에 충돌했다고 \ 평등하지 않는 확인하십시오. 444 00:27:28,430 --> 00:27:31,510 우리는 그 시점, 루프의 끝에서 중지하려면, 우리는 또한 확인하시기 바랍니다 445 00:27:31,510 --> 00:27:36,170 여러분이 알거나 추측 경우 특별한 상수, EOF, - 뭘 무엇을 의미합니까? 446 00:27:36,170 --> 00:27:39,860 파일의 끝입니다. 나는 키보드에 입력하는 경우 때문에 그래서이는 무의미한 거라고 447 00:27:39,860 --> 00:27:41,900 이 일에 끼어은 파일, 정말 없습니다 448 00:27:41,900 --> 00:27:44,330 그러나 이것은 단지 의미하는 데 사용되는 일반적인 용어 죠 449 00:27:44,330 --> 00:27:50,320 다른 그 어떤 것도 인간의 손가락에서 오는되지 않습니다. EOF. 파일의 끝입니다. 450 00:27:50,320 --> 00:27:52,600 옆으로, 당신은 키보드에서 컨트롤 D를 누르 한 경우, 451 00:27:52,600 --> 00:27:54,680 당신은 아직 없을 거라는, 당신은 컨트롤 C를 부딪 혔어요. 452 00:27:54,680 --> 00:27:57,920 그러나 제어 d는이 특별한 상수라는 EOF를 보냅니다. 453 00:27:57,920 --> 00:28:03,100 >> 이제 우리는 좀 동적 메모리 할당을 갖추고 있습니다. 454 00:28:03,100 --> 00:28:06,460 n은 + 1> 용량, 지금은 n을 설명합니다면. 455 00:28:06,460 --> 00:28:09,380 N은 얼마나 많은 바이트는, 버퍼에 현재있다 456 00:28:09,380 --> 00:28:11,970 현재 사용자의 구축하고있는 문자열입니다. 457 00:28:11,970 --> 00:28:16,240 당신이 버퍼 용량을 가지고보다 버퍼에 더 많은 문자가있는 경우는, 458 00:28:16,240 --> 00:28:20,760 직관적으로, 우리가 다음 할 일은 더 많은 용량을 할당 할 수 있습니다. 459 00:28:20,760 --> 00:28:24,490 여기 산술의 일부를 통해 탈지거야 460 00:28:24,490 --> 00:28:26,900 여기에만이 기능에 중점을두고 있습니다. 461 00:28:26,900 --> 00:28:29,170 당신은 malloc이 무엇인지, 또는 적어도 일반적으로 알고. 462 00:28:29,170 --> 00:28:32,380 realloc은 무엇을 맞춰보세요. [학생 답 이해할 수없는] 463 00:28:32,380 --> 00:28:35,690 >> 그래. 그리고 꽤 메모리를 추가하지 말고 다음과 같이 메모리를 reallocates : 464 00:28:35,690 --> 00:28:40,530 당신에게 기억을 더 많이 제공 할 수있는 문자열의 끝에서 객실 아직 거기 있다면 465 00:28:40,530 --> 00:28:43,370 그것은 원래를 제공하는 대신 다음은 추가 메모리를드립니다. 466 00:28:43,370 --> 00:28:46,640 그래서 그냥 백업 백업 백업 다시 문자열 문자를 넣어 수 있습니다. 467 00:28:46,640 --> 00:28:49,290 그런 경우가 아니라면 그러나, 때문에 너무 오래 시간을 끌었 468 00:28:49,290 --> 00:28:51,700 그리고 무작위로 뭔가가 메모리에 plopped 기는했지만, 그러나 추가이있어 469 00:28:51,700 --> 00:28:56,480 여기에 메모리, 괜찮아요. Realloc, 당신에 대한 모든 무거운 리프팅을 할거야 470 00:28:56,480 --> 00:28:58,810 당신이 지금까지 여기에서 읽은 문자열을 이동 471 00:28:58,810 --> 00:29:02,550 거기에 내려 놓고 한 다음 그 시점에서 좀 더 활주로를 제공합니다. 472 00:29:02,550 --> 00:29:05,610 그래서 손의 물결과 함께, 제가 어떤 GetString이하는 말하자 473 00:29:05,610 --> 00:29:09,540 그것은 작은 버퍼, 어쩌면 한 단일 문자로 시작해야 해 474 00:29:09,540 --> 00:29:12,300 2 문자 사용자가 유형의 경우 GetString가 종료 475 00:29:12,300 --> 00:29:15,210 realloc를 호출하고 우 '라고, 1 문자는 충분하지했다. 476 00:29:15,210 --> 00:29:18,480 저에게이 문자를주세요. ' 당신은 루프의 논리 읽어 그런 경우 477 00:29:18,480 --> 00:29:21,070 그것은 우 ', 3 문자로 입력 한 사용자를 말할거야. 478 00:29:21,070 --> 00:29:25,690 지금은 2 위이지만 4 자 이리 줘, 그럼 16 및 32을 제공 한 후, 내게 팔을 제공합니다. ' 479 00:29:25,690 --> 00:29:28,180 나는 용량 할 때마다 두 배로 증가한다는 사실 480 00:29:28,180 --> 00:29:30,320 버퍼가 천천히 성장하지 않을 것을 의미합니다. 481 00:29:30,320 --> 00:29:35,870 그것은 매우 빨리 성장거야, 그의 장점이 될 일? 482 00:29:35,870 --> 00:29:38,540 왜 사용자도 불구하고, 버퍼의 크기를 두 배로 무엇입니까 483 00:29:38,540 --> 00:29:41,450 단지는 키보드에서 1 추가 문자를해야 할 수도 있습니다? 484 00:29:41,450 --> 00:29:44,830 [학생 답 이해할 수없는]. >> 무슨 뜻이지? 485 00:29:44,830 --> 00:29:46,750 그렇지. 당신은 자주 성장을 할 필요가 없습니다. 486 00:29:46,750 --> 00:29:48,870 그리고이 중 어떤 야 - 넌 여기에서 돈을 hedging. 487 00:29:48,870 --> 00:29:54,150 아이디어는 속도가 느린 경향이 있기 때문에, realloc 많은 전화를하지 않으려는 것. 488 00:29:54,150 --> 00:29:56,840 당신이 곧 볼 수 있으므로, 메모리 운영 체제에게 모든 시간을 489 00:29:56,840 --> 00:30:00,620 미래 문제 세트에, 그것은 시간이 좀 걸릴 경향이있다. 490 00:30:00,620 --> 00:30:04,980 당신이 공간을 낭비하는 경우에도, 시간의 양을 최소화 그래서, 좋은 일이 될 경향이있다. 491 00:30:04,980 --> 00:30:07,250 >> 그러나 우리는 여기 GetString의 마지막 부분을 읽어 경우, 492 00:30:07,250 --> 00:30:10,880 다시 여기 모든 한 줄을 이해하는 것은 오늘날 매우 중요하지 않습니다. 493 00:30:10,880 --> 00:30:14,830 그러나 결국 다시 malloc 호출하는 것을, 그리고 할당 494 00:30:14,830 --> 00:30:16,980 이 문자열을 여러 바이트를 필요로 그대로 495 00:30:16,980 --> 00:30:21,620 다음 과도하게 큰 버퍼, 무료 전화하여 버리 겠어요 496 00:30:21,620 --> 00:30:23,510 그것은 실제로 너무 많이 두 배로라도한다면. 497 00:30:23,510 --> 00:30:25,970 즉, 그 GetString이 모든 시간을 작업 한 방법입니다. 498 00:30:25,970 --> 00:30:30,100 그것을 행하는 모든 또 한번, 또 한번 다시 한 번에 한 문자를 읽어 499 00:30:30,100 --> 00:30:37,930 하고 몇 가지 추가 메모리를 필요로 할 때마다, 그것은 realloc를 호출하여 그것을 운영 체제를 묻습니다. 500 00:30:37,930 --> 00:30:41,660 질문? 괜찮아요. 501 00:30:41,660 --> 00:30:45,220 >> 공격. 우리가 포인터를 이해 이젠, 또는 이상 502 00:30:45,220 --> 00:30:47,560 , 포인터와 함께 점점 더 잘 알고 있습니다 503 00:30:47,560 --> 00:30:50,020 온 세상이 파괴되기 시작하는 방법의이 생각해 보자 504 00:30:50,020 --> 00:30:53,160 당신은 매우 적대 사용자에 대해 변호하지 않는 경우, 505 00:30:53,160 --> 00:30:55,180 시스템을 해킹하는 사람들. 506 00:30:55,180 --> 00:31:00,260 일부 등록 코드를 우회하여 소프트웨어를 훔치려 사람들 507 00:31:00,260 --> 00:31:02,150 그들은 다른 인치를 입력해야 할 수도 508 00:31:02,150 --> 00:31:04,860 그냥 C 코드, 여기에이 예를 살펴 509 00:31:04,860 --> 00:31:07,920 그 아래에있는 주요 기능을 가지고 즉, 함수를 호출 foo는 510 00:31:07,920 --> 00:31:12,100 과는 foo는에 전달됩니까? [학생] 하나의 인수입니다. 511 00:31:12,100 --> 00:31:15,660 >> 단일 인수입니다. 따라서 변수는 argv [1], 즉 사용자가 입력 한 첫 번째 단어를 의미 512 00:31:15,660 --> 00:31:19,150 a.out 뭐든간에 한 후 명령 줄에서 프로그램이 호출됩니다. 513 00:31:19,150 --> 00:31:24,920 foo는 그래서 상단에, 숯불 *에 걸리지 만, 숯불 *은 무엇인가? 514 00:31:24,920 --> 00:31:28,860 문자열입니다. 이 새로운 아무것도없고, 그 문자열은 임의로 바 호출되고 있습니다. 515 00:31:28,860 --> 00:31:36,090 여기에서이 행에서 문자는 C [12], 반 기술 영어의 종류,이 라인은 뭐하는 거지? 516 00:31:36,090 --> 00:31:40,640 의 배열입니다 - 문자. 나에게 12 자의 배열을 제공합니다. 517 00:31:40,640 --> 00:31:44,970 그래서 우리는이 버퍼 전화 할 수 있습니다. 그것은 기술적으로 C라고하지만, 프로그래밍의 버퍼의 518 00:31:44,970 --> 00:31:47,890 당신이 좀 가져 인치를 넣을 수있는 공간의 무리를 의미 519 00:31:47,890 --> 00:31:49,940 >> 그런 다음 마지막으로, memcpy, 우리는 이전에 사용하지했습니다. 520 00:31:49,940 --> 00:31:52,380 그러나 당신은 아마 그것이 무엇 추측 할 수 있습니다. 이 메모리를 복사합니다. 521 00:31:52,380 --> 00:31:58,790 는 무엇입니까? 음, 분명히, C로, 그 입력, 바 복사 522 00:31:58,790 --> 00:32:03,420 만까지 줄의 길이 있습니다. 523 00:32:03,420 --> 00:32:07,440 그러나 여기에 버그가 있습니다. 524 00:32:07,440 --> 00:32:14,500 좋아, 기술적으로 우리는 정말 (바) 올바른의 X sizeof (숯불)를 나 strlen을해야합니다. 525 00:32:14,500 --> 00:32:17,920 하지만, 여기에 최악의 경우에, 씨가 도대체​​가 가정을 해 - 그래, 알았어. 526 00:32:17,920 --> 00:32:23,760 그런 다음이 버그가 있습니다. 그래서 sizeof (자), 좋아,이 조금 넓은 만들어 보자. 527 00:32:23,760 --> 00:32:28,860 이제 무슨 버그가 아직 거기 있어요? 528 00:32:28,860 --> 00:32:31,630 [학생 답 이해할 수없는] 일에 대해 >> 확인? 좋아, 그럼 우리는 확인해야 529 00:32:31,630 --> 00:32:35,010 NULL에 대한 귀하의 포인터가 NULL 일 때 나쁜 일이 생겼 때문에, 530 00:32:35,010 --> 00:32:38,490 거기 살게 될 수도 그리고 당신은 NULL에 보내지 말아야하기 때문에 531 00:32:38,490 --> 00:32:40,890 * 연산자로 dereferencing하여. 532 00:32:40,890 --> 00:32:45,250 그래서 이렇게 잘, 우리는 다른 뭐하는거야? 논리적 결함도 여기에있다. 533 00:32:45,250 --> 00:32:47,650 [학생 답 이해할 수없는] 534 00:32:47,650 --> 00:32:51,340 >> 그래서, 만약 argc는 ≥ 2 확인? 535 00:32:51,340 --> 00:32:54,130 자,이 프로그램에서 3 버그는 여기에 혼자 야. 536 00:32:54,130 --> 00:33:00,080 사용자가 실제로 변수는 argv [1], 좋은에 아무것도 입력하면 우리는 확인하지. 537 00:33:00,080 --> 00:33:02,240 따라서 세 번째 버그가 뭐죠? 응? 538 00:33:02,240 --> 00:33:04,420 좋은 [학생 답 이해할 수없는] >>. 539 00:33:04,420 --> 00:33:09,590 하나가 시나리오를 확인 했어요. 우리는 절대적으로 더 많은 메모리를 복사하지 않습니다 확인 540 00:33:09,590 --> 00:33:12,800 줄의 길이를 초과보다. 541 00:33:12,800 --> 00:33:15,720 그래서 문자열 경우에 입력 한 사용자는 10 자이며, 542 00:33:15,720 --> 00:33:18,260 이 '만 10 자 복사합니다.'라고합니다 543 00:33:18,260 --> 00:33:21,140 그건 괜찮아,하지만 만약 프롬프트에 단어를 입력 한 사용자 544 00:33:21,140 --> 00:33:29,360 20 문자 단어처럼,이 무엇에 바에서 사본 20자를 말하는 것입니다? 545 00:33:29,360 --> 00:33:32,840 그렇지 않으면 우리의 버퍼로 알려진 C는, 어느 방금 데이터를 쓴 의미 546 00:33:32,840 --> 00:33:35,950 자신이 소유하지 않은 것을 8 바이트 위치에, 547 00:33:35,950 --> 00:33:38,320 당신은 당신이 그들을 할당 없다는 점에서 소유하고 있지 않습니다. 548 00:33:38,320 --> 00:33:41,190 그래서이 일반적으로 버퍼 오버 플로우 공격으로 알려진 곳입니다 549 00:33:41,190 --> 00:33:46,650 감각 또는 버퍼 오버런 공격하고, 공격이 경우 사용자가 550 00:33:46,650 --> 00:33:50,650 또는 함수를 호출있어 프로그램은 악의적으로 이런 짓을하는 거지 551 00:33:50,650 --> 00:33:53,780 어떻게 실제로 옆에 매우 나쁜 될 수 발생합니다. 552 00:33:53,780 --> 00:33:55,690 >> 의 여기이 그림을 살펴 보자. 553 00:33:55,690 --> 00:33:59,070 이 그림은 메모리의 스택을 나타냅니다. 554 00:33:59,070 --> 00:34:01,050 그리고 때마다 당신은 함수를 호출하는 기억 555 00:34:01,050 --> 00:34:04,520 당신은 스택이 작은 프레임을 한 다음 다른 한 다음 다른 한 다음 다른. 556 00:34:04,520 --> 00:34:07,250 그리고 지금까지 우리가이긴했던 것은 사각형 이러한을 멀리 추상적 인 557 00:34:07,250 --> 00:34:09,380 이 보드 나 여기 화면 중. 558 00:34:09,380 --> 00:34:12,219 하지만 우리가 그 사각형 중 하나를 확대하면, 559 00:34:12,219 --> 00:34:16,460 당신은 함수 foo는를 호출 할 때, 그것은 더 스택에있을거야 밝혀 560 00:34:16,460 --> 00:34:18,739 그 프레임과 그 사각형의 내부 561 00:34:18,739 --> 00:34:23,370 보다 우리가 스왑에 대해 얘기했던 것처럼 x와 y와 a와 b. 562 00:34:23,370 --> 00:34:25,949 그것은 일부 낮은 수준의 세부 사항이 있다는 것을 밝혀 563 00:34:25,949 --> 00:34:27,780 그 중에서도 주소를 반환합니다. 564 00:34:27,780 --> 00:34:33,020 메인은 ​​foo는 호출 할 때이 밝혀 주는 푸 알려있다 565 00:34:33,020 --> 00:34:36,760 컴퓨터의 메모리에 어떤 메인의 주소입니다. 566 00:34:36,760 --> 00:34:40,659 달리하기 때문에, 가능한 한 빨리 foo는 등, 여기이 경우에서와 같이 실행 완료 567 00:34:40,659 --> 00:34:43,790 일단, foo는의 끝에이 가까운 둥근 중괄호에 도달 568 00:34:43,790 --> 00:34:48,860 프로그램의 컨트롤이 가야되는 방법을 대체 foo는 알 수 있습니까? 569 00:34:48,860 --> 00:34:52,460 그것은 그 질문에 대한 답이 여기에 빨간색 사각형에있는 것을 밝혀졌다. 570 00:34:52,460 --> 00:34:56,130 이 포인터를 나타냅니다, 그것은 일시적으로 저장하기 위해 컴퓨터에 일이에요 571 00:34:56,130 --> 00:35:00,250 소위 스택에 해당하므로 가능한 한 빨리 푸 등 주요의 주소가 실행되면, 572 00:35:00,250 --> 00:35:04,110 컴퓨터는 어디으로 돌아가려면 메인에 어떤 줄 알고 있습니다. 573 00:35:04,110 --> 00:35:06,900 저장된 프레임 포인터는 비슷하게 관련이 있습니다. 574 00:35:06,900 --> 00:35:09,620 여기에 숯불에 * 표시 줄이 무엇을 제시 하는가? 575 00:35:09,620 --> 00:35:14,740 자, 이제이 파란색 세그먼트는 여기에 foo는의 프레임이, 바는 무엇인가? 576 00:35:14,740 --> 00:35:18,300 좋아, 바 foo는 기능에 그냥 인수입니다. 577 00:35:18,300 --> 00:35:20,720 >> 그래서 지금 우리는 익숙한 그림 돌아 간다. 578 00:35:20,720 --> 00:35:22,960 화면에 더 많은 것들을 더 산만이 579 00:35:22,960 --> 00:35:27,490 하지만 하늘색 세그먼트 우리는 스왑과 같은 무언가에 대한 칠판에 그리기 된 한 내용입니다. 580 00:35:27,490 --> 00:35:31,890 즉, 막대입니다 지금 foo에 대한 프레임과 거기에 유일한 것입니다 581 00:35:31,890 --> 00:35:34,630 어떤이 매개 변수입니다. 582 00:35:34,630 --> 00:35:39,840 하지만 다른 무슨 일이이 코드에 따라 스택에해야하나요? 583 00:35:39,840 --> 00:35:44,280 숯불 C [12]. 그래서 우리는 또한 메모리의 12 제곱이 표시됩니다 584 00:35:44,280 --> 00:35:46,260 C라는 변수에 할당. 585 00:35:46,260 --> 00:35:48,340 그리고 실제로 우리는 화면에 해당있어. 586 00:35:48,340 --> 00:35:51,650 맨 위에가 C [0]이 다이어그램의 다음, 저자 587 00:35:51,650 --> 00:35:55,130 사각형의 그리기 귀찮게하지만, 12 실제로 있습니다 않았어 588 00:35:55,130 --> 00:36:00,120 너 때문에 오른쪽 하단에 보면, C [11] 당신이 0에서 계산하면, 12 등 바이트입니다. 589 00:36:00,120 --> 00:36:06,190 그러나 여기 문제입니다 어느 방향에서 C는 성장? 590 00:36:06,190 --> 00:36:10,390 아래로 위로의 정렬, 그렇죠? 가 상단에있는 시작하고 아래로 성장하는 경우는, 591 00:36:10,390 --> 00:36:13,480 우리 모두가 이곳 우리에게 많은 활주로를 떠난 같이하지 않습니다. 592 00:36:13,480 --> 00:36:15,320 우리는 가지, 구석에 자신을 색칠 한 593 00:36:15,320 --> 00:36:20,210 그 C [11] 스택 프레임 포인터에 대한 지금하고있는 바, 대한 권리까지이며, 594 00:36:20,210 --> 00:36:23,800 이는 반환 주소에 대한 바로이며 더 이상 공간이 있어요. 595 00:36:23,800 --> 00:36:26,100 당신이 실수다면 함축 된 의미는, 다음이야 596 00:36:26,100 --> 00:36:30,460 당신은 12 바이트 버퍼에 20 바이트를 읽어보세요? 597 00:36:30,460 --> 00:36:33,460 어디 그 여덟 추가 바이트가는거야? 598 00:36:33,460 --> 00:36:36,370 다른 모든 내부, 그 중 일부는 중요한 슈퍼입니다. 599 00:36:36,370 --> 00:36:40,480 그리고 가장 중요한 것은, 잠재적으로, 거기에 반환 주소 빨간 상자입니다. 600 00:36:40,480 --> 00:36:44,720 당신도 실수 나 adversarially 것을 가정하기 때문에 601 00:36:44,720 --> 00:36:48,040 그 4 바이트, 그 포인터 주소를 덮어 602 00:36:48,040 --> 00:36:53,190 단지 쓰레기로하지만, 메모리에 실제 주소를 나타 내기 위해 어떻게 번호를? 603 00:36:53,190 --> 00:36:55,930 논리적으로 implicaiton는 무엇입니까? 604 00:36:55,930 --> 00:36:59,080 [학생 답변, 이해할 수없는] >> 맞아. foo는 반환 할 때 605 00:36:59,080 --> 00:37:03,560 와 조회수 곱슬 괄호 즉, 프로그램은 주로 돌아하지 계속 것입니다 606 00:37:03,560 --> 00:37:08,320 그렇게 빨간 상자에있는 모든 주소로 돌아거야. 607 00:37:08,320 --> 00:37:11,560 >> 이제 우회 소프트웨어 등록의 경우, 608 00:37:11,560 --> 00:37:14,400 기능에 반환되고있어 주소 무엇일까요 609 00:37:14,400 --> 00:37:18,820 일반적으로 당신은 소프트웨어에 대해 지불 한 후 전화 등록 코드를 입력 된 당할지? 610 00:37:18,820 --> 00:37:23,160 당신은 여기 안에 트릭 컴퓨터의 정렬, 대신, 여기에 갈 수 있습니다. 611 00:37:23,160 --> 00:37:27,950 당신이 정말로 똑똑한 있다면, 상대는 실제로는 키보드에서 입력 할 수 있습니다 612 00:37:27,950 --> 00:37:32,500 예를 들어,하지 실제 단어가 아닌 20 자,하지만 가정 그 또는 그녀 613 00:37:32,500 --> 00:37:36,200 코드를 나타냅니다 일부 문자의 종류? 614 00:37:36,200 --> 00:37:38,860 그리고 C 코드 될거 아니야, 이건 문자 될거야 615 00:37:38,860 --> 00:37:42,920 그 바이너리 기계 코드, 0의 1의를 나타냅니다. 616 00:37:42,920 --> 00:37:46,740 그러나 어떻게 든 GetString 프롬프트에 붙여, 그런 짓을 할만큼 똑똑 겠지 617 00:37:46,740 --> 00:37:49,460 본질적으로 코드를 컴파일 것을, 618 00:37:49,460 --> 00:37:56,900 그리고 마지막 4 바이트는 return address를 덮어, 그 입력은 주소가 뭔지하나요? 619 00:37:56,900 --> 00:38:01,860 그것은이 빨간색 사각형 버퍼의 첫번째 바이트의 주소를 저장합니다. 620 00:38:01,860 --> 00:38:04,270 그럼 당신은 정말 똑똑한해야하고,이 시행 착오가 상당히 많은데 621 00:38:04,270 --> 00:38:08,500 나쁜있는 사람들 만이 버퍼가 얼마나 큰 알아낼 수 있다면위한 622 00:38:08,500 --> 00:38:12,170 이 프로그램에 입력의 마지막 몇 바이트 제공하는 등 623 00:38:12,170 --> 00:38:15,970 귀하의 버퍼의 시작의 주소에 상응하는 것으로 발생, 624 00:38:15,970 --> 00:38:22,270 이 작업을 수행 할 수 있습니다. 우리가 말을하면, 정상적으로, 안녕, 그리고 \ 0, 그 버퍼에 봤 구요. 625 00:38:22,270 --> 00:38:27,860 그러나 우리는 더 똑똑 하구나, 우리는 우리가 총칭 공격 코드를 뭐라고 부를와 그 버퍼를 작성하는 경우, 626 00:38:27,860 --> 00:38:31,920 A, A, A, A : 공격, 공격, 공격, 공격이 그냥 나쁜 일을 수행 무언가이다. 627 00:38:31,920 --> 00:38:35,190 음, 당신이 정말로 똑똑한 경우이 작업을 수행 할 수 발생 : 628 00:38:35,190 --> 00:38:41,740 80, CO, 35, 08 : 여기에서 빨간색 상자에서 숫자의 순서입니다. 629 00:38:41,740 --> 00:38:44,890 그 여기 있어요 수를 일치하는지 확인합니다. 630 00:38:44,890 --> 00:38:47,280 이 반대 순서로하지만 그 어떤 다른 시간에 더. 631 00:38:47,280 --> 00:38:51,430 이 반환 주소가 의도적으로 변경되었는지 확인합니다 632 00:38:51,430 --> 00:38:54,970 여기에 주소를 동일하기 위해, 메인의가 아닌 주소를 입력합니다. 633 00:38:54,970 --> 00:39:00,170 나쁜 남자가 슈퍼 똑똑하면, 그 또는 그녀는 공격 코드에 포함 것입니다 634 00:39:00,170 --> 00:39:02,890 뭔가처럼 '사용자의 모든 파일을 삭제합니다.' 635 00:39:02,890 --> 00:39:06,320 또는 '나는에 로그인 할 수있는 사용자 계정을 만듭니다.' '은 암호를 복사'또는 636 00:39:06,320 --> 00:39:10,130 뭐든지, 그리고이 위험과 C.의 힘이기도하다 637 00:39:10,130 --> 00:39:12,900 당신은 포인터를 통해 메모리에 액세스 할 수 있습니다 때문에 638 00:39:12,900 --> 00:39:15,950 그리고 따라서는 컴퓨터의 메모리에 원하는 모든 것을 쓸 수 있습니다. 639 00:39:15,950 --> 00:39:19,290 당신은 컴퓨터가 단순히 원하는 건 뭐든지으로 작업을 수행 할 수 있습니다 640 00:39:19,290 --> 00:39:22,780 이 자체 메모리 공간 내 주위에 뛰어든지. 641 00:39:22,780 --> 00:39:27,230 그리고이 일에, 많은 프로그램과 손상되도록 많은 웹 사이트 642 00:39:27,230 --> 00:39:29,730 이 활용 사람들에게 졸이다. 643 00:39:29,730 --> 00:39:32,510 그런데, 초 정교한 공격처럼 보인다 수 있습니다 644 00:39:32,510 --> 00:39:34,220 하지만 늘 그런 식으로 시작되지 않습니다. 645 00:39:34,220 --> 00:39:36,770 >> 현실은, 어떤 나쁜 사람들이 일반적으로 할 것 것이 때문입니다 646 00:39:36,770 --> 00:39:41,470 이 명령 줄에서 프로그램이나 GUI 프로그램이나 웹 사이트, 고갈 된 것인지 647 00:39:41,470 --> 00:39:43,290 당신은 헛소리를 제공 할 수 있습니다. 648 00:39:43,290 --> 00:39:46,940 당신은 검색 필드를 누르 입력에 아주 큰 단어를 입력 649 00:39:46,940 --> 00:39:49,030 그리고 당신은 웹 사이트 충돌 지켜보기로 하죠. 650 00:39:49,030 --> 00:39:53,270 또는 프로그램이 몇 가지 오류 메시지가 명부 지켜보기로 하죠. 651 00:39:53,270 --> 00:39:55,480 당신이 운이있는 경우 등으로 인해 나쁜 놈, 652 00:39:55,480 --> 00:39:59,610 그리고 당신은 프로그램을 충돌 이상한 입력을 제공합니다 653 00:39:59,610 --> 00:40:02,280 그건 프로그래머가 나쁜 행동을 기대하지 않았다는 뜻 654 00:40:02,280 --> 00:40:05,420 이는 충분히 노력을, 당신은 아마도 수 의미 655 00:40:05,420 --> 00:40:09,870 충분한 시행 착오는 더 정확한 공격을 임금하는 방법을 알아 봅시다. 656 00:40:09,870 --> 00:40:15,900 보안이 너무 많은 부분은 모두 이러한 공격을 피할 수 있지만,이를 감지하지 않습니다 657 00:40:15,900 --> 00:40:20,250 실제로 로그를보고 미친 입력 귀하의 웹 사이트에 입력 사람들이 어떤 그림을 그릴 지. 658 00:40:20,250 --> 00:40:26,040 어떤 검색어를 몇 가지 버퍼를 넘쳐의 희망에 웹 사이트에 사람들을 썼지? 659 00:40:26,040 --> 00:40:28,900 그리고 배열인지의 간단한 기본이 모든 종기 아래, 660 00:40:28,900 --> 00:40:32,510 과가 메모리를 할당하고 사용한다는 것은 무슨 뜻입니까? 661 00:40:32,510 --> 00:40:34,920 그리고 그와 관련된도,이 있습니다. 662 00:40:34,920 --> 00:40:37,520 >> 따라서 아직 다시 하드 드라이브의 내부 훑어 까. 663 00:40:37,520 --> 00:40:40,190 그럼 당신은 기억 한 두 주 전에에서 당신은 파일을 드래그 할 때 664 00:40:40,190 --> 00:40:45,470 에 휴지통 또는 휴지통 할 수있는 어떤 일이 벌어 질까요? 665 00:40:45,470 --> 00:40:47,850 [학생]는 전혀 없습니다. >> 네, 절대적으로 아무것도. 당신은 부족 결국 경우 666 00:40:47,850 --> 00:40:51,370 디스크 공간에 Windows 또는 Mac OS 당신을 위해 파일을 삭제하기 시작합니다. 667 00:40:51,370 --> 00:40:53,670 당신이 거기에 뭔가를 드래그이라면, 그 모든 게 안전하지 않을거야. 668 00:40:53,670 --> 00:40:56,550 모든 roomate, 친구 나 가족이해야 할 일이 두 번 클릭하고 짜잔하고 있습니다. 669 00:40:56,550 --> 00:40:59,720 삭제할하려고하는 모든 스케치 파일이 있어요. 670 00:40:59,720 --> 00:41:02,840 우리 대부분 그래서 적어도 당신은 마우스 오른쪽 버튼을 클릭하거나 클릭을 제어 있다는 걸 알고 671 00:41:02,840 --> 00:41:05,320 그리고 비어있는 휴지통, 또는 그 비슷한. 672 00:41:05,320 --> 00:41:07,900 하지만 그렇다하더라도, 그 꽤 트릭을하지 않습니다. 673 00:41:07,900 --> 00:41:11,340 귀하의 하드 드라이브에 파일이있을 때 어떤 현상이 발생하기 때문에 674 00:41:11,340 --> 00:41:14,590 그 몇 가지 Word 문서 또는 일부 JPEG를 나타냅니다? 675 00:41:14,590 --> 00:41:18,820 그리고이 하드 드라이브를 나타내고, 우선은 여기에 조각이 파일을 나타냅니다 말 676 00:41:18,820 --> 00:41:21,640 과 0의 1의의를 왕창 구성있어. 677 00:41:21,640 --> 00:41:25,470 만 휴지통 또는 휴지통으로 해당 파일을 드래그하면 어떻게, 어떻게 678 00:41:25,470 --> 00:41:30,390 뿐만 아니라 그것을 비우? 679 00:41:30,390 --> 00:41:32,820 아무것도의 정렬. 지금은 아무것도 아니예요. 680 00:41:32,820 --> 00:41:37,630 작은 일이이 테이블의 형태로 발생하기 때문에 지금, 그냥 아무것도 없습니다. 681 00:41:37,630 --> 00:41:41,170 따라서 컴퓨터의 메모리 내부 데이터베이스 또는 테이블의 어떤 종류가 있어요 682 00:41:41,170 --> 00:41:44,470 이는 본질적으로, 파일 이름 1 열이 683 00:41:44,470 --> 00:41:50,550 그리고이 위치를 123 만 임의의 숫자 일 수도 파일의 위치, 1 열. 684 00:41:50,550 --> 00:41:58,270 그래서 우리는 x.jpg 같은, 위치 123이있을 수 있습니다. 685 00:41:58,270 --> 00:42:02,870 당신이 휴지통을 비울 때 어떻게, 그럼 어떻게 될까요? 686 00:42:02,870 --> 00:42:06,720 멀리해라. 그런데 멀리하지 않는 것은 0 년대와 1의 것입니다. 687 00:42:06,720 --> 00:42:09,690 >> 그래서, 다음, 연결 4 pset하는거야? 688 00:42:09,690 --> 00:42:13,460 음, pset 4, 우연히 삭제 한해서 689 00:42:13,460 --> 00:42:15,890 사진을 모두 가지고 컴팩트 플래시 카드, 690 00:42:15,890 --> 00:42:18,710 또는 운에 의해 그가 손상되었고, 때문에 691 00:42:18,710 --> 00:42:21,170 0의 1이 아직 존재하지 않는 것을 의미하는 것은 아닙니다. 692 00:42:21,170 --> 00:42:23,920 무언가가 손상 죽었 기 때문에 아마 그 중 몇은 손실됩니다 693 00:42:23,920 --> 00:42:26,530 일부 공의는 1의, 1의 된 것은 의미에 0가되었습니다. 694 00:42:26,530 --> 00:42:30,460 버그가 소프트웨어 또는 하드웨어 결함 때문에 나쁜 일이 발생할 수 있습니다. 695 00:42:30,460 --> 00:42:33,510 그러나 그 비트의 대부분은, 아마도 그들도 100 %, 아직 거기 696 00:42:33,510 --> 00:42:38,330 그것은 JPEG 1 시작 위치를 컴퓨터 나 카메라가 모르는 단지 697 00:42:38,330 --> 00:42:41,660 와 JPEG 2 시작 위치,하지만 만일에, 프로그래머, 698 00:42:41,660 --> 00:42:45,800 이러한 JPEG 파일이 또는 어떻게 생겼는지 이해가 약간의와 함께 알아, 699 00:42:45,800 --> 00:42:49,570 당신은 0의 1의를 분석하고 아 '라고 할 수 있습니다. JPEG. , JPEG 우. ' 700 00:42:49,570 --> 00:42:52,830 당신은 본질적으로 단지에있는 프로그램을 작성하거나 할 수 있지만 루프 701 00:42:52,830 --> 00:42:56,100 그게 그 파일의 각각의 하나를 복구합니다. 702 00:42:56,100 --> 00:42:59,360 수업는 "안전하게"파일을 지우고 시작하는 것입니다 703 00:42:59,360 --> 00:43:01,720 당신은 모두 이러한 일을 방지하려면. 그래? 704 00:43:01,720 --> 00:43:06,940 [학생 질문 이해할 수없는] 705 00:43:06,940 --> 00:43:11,150 >> 당신은 전에했던 것보다 더 많은 메모리를 살아요 - 706 00:43:11,150 --> 00:43:14,790 오! 좋은 질문입니다. 왜, 다음 휴지통을 비우는 후, 707 00:43:14,790 --> 00:43:18,300 컴퓨터가 당신이 전에보다 더 많은 여유 공간이 있다고 말해 무엇입니까? 708 00:43:18,300 --> 00:43:22,450 간단히 말해서, 그건 거짓말이 없기 때문입니다. 더 기술적으로, 당신은 더 많은 공간을 가지고 있습니다. 709 00:43:22,450 --> 00:43:26,720 지금 당신이 한 말 때문에 그 파일이 있었던 곳, 다른 물건을 넣을 수 있습니다, 710 00:43:26,720 --> 00:43:28,930 하지만이 비트가 멀리가는 것은 아닙니다 711 00:43:28,930 --> 00:43:33,070 그리고 그 비트가 보호를 위해, 예를 들어, 모든 공의를 변경하고 있습니다 의미하지는 않습니다. 712 00:43:33,070 --> 00:43:37,520 반대로, 당신의 "안전하게"지우기 파일 또는 물리적으로는 장치를 파괴 할 수 있다면 713 00:43:37,520 --> 00:43:40,810 그건 정말 그 주변, 때로는 유일한 방법입니다. 714 00:43:40,810 --> 00:43:45,300 그럼 왜 우리는 그 반 무서운 쪽지를 떠나지 말아요, 우리는 월요일에 표시됩니다. 715 00:43:45,300 --> 00:43:52,810 CS50.TV