1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [음악 연주] 3 00:00:11,210 --> 00:00:12,100 >> ROB BODEN : 좋습니다. 4 00:00:12,100 --> 00:00:15,620 비디오의 첫 번째 그래서, 우선, 익숙한 얼굴에서. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [동영상 재생] 7 00:00:22,560 --> 00:00:23,370 >> - 좋아. 8 00:00:23,370 --> 00:00:27,150 이것은 CS50,이입니다 주일의 시작. 9 00:00:27,150 --> 00:00:29,980 내가 당신과 함께있을 수 없습니다 죄송합니다 오늘, 그러나 저를 소개 할 수 있도록 10 00:00:29,980 --> 00:00:32,880 CS50 자신의 롭 보덴. 11 00:00:32,880 --> 00:00:33,872 >> [END 동영상 재생] 12 00:00:33,872 --> 00:00:39,340 >> [박수와 환호] 13 00:00:39,340 --> 00:00:41,277 >> ROB BODEN :의 작품으로 그 비디오는 환상적이다. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 괜찮아요. 16 00:00:47,770 --> 00:00:50,960 그래서 일단, 다른 점심이있다. 17 00:00:50,960 --> 00:00:52,330 그것은 1:15에서 내일입니다. 18 00:00:52,330 --> 00:00:54,480 이번 주 금요일은 점심 식사에게 없습니다. 19 00:00:54,480 --> 00:00:55,810 그것은 Quora에와있다. 20 00:00:55,810 --> 00:01:00,190 그리고 토미는 하나의하지만, 여기 없습니다 전 머리의 CF가 사람들, 21 00:01:00,190 --> 00:01:01,530 토미 맥 윌리엄. 22 00:01:01,530 --> 00:01:02,730 그래서 그는 재미있는 사람이야. 23 00:01:02,730 --> 00:01:04,819 당신은 와야한다. 24 00:01:04,819 --> 00:01:05,900 >> 괜찮아요. 25 00:01:05,900 --> 00:01:11,360 그래서 지난 주, 우리는 떨어져 파괴 시작 캐릭터가 정말 무엇에 대해. 26 00:01:11,360 --> 00:01:14,830 우리는 처음부터 알고 있었어 그 그것은 일련의 문자입니다. 27 00:01:14,830 --> 00:01:18,130 그러나 지난 주, 우리는 사실에 파 놓은 광산 무엇이 정말 일련의입니다 28 00:01:18,130 --> 00:01:22,110 문자는 물론, 우리는 지금이 문자의 배열. 29 00:01:22,110 --> 00:01:26,450 그리고 우리는 문자열, 그것은 배열의 것을 알고 문자, 맨 끝에서, 30 00:01:26,450 --> 00:01:30,920 우리는이 특별한 NULL 바이트가,이 백 슬래시 0, 즉 말을 나타냅니다 31 00:01:30,920 --> 00:01:32,230 문자열. 32 00:01:32,230 --> 00:01:36,970 >> 그리고 문자열의 배열 자, 그러나 우리는 할 수 있습니다보다 더 33 00:01:36,970 --> 00:01:39,530 단지 문자의 배열, 우리는 어떤의 배열을 가질 수있다 34 00:01:39,530 --> 00:01:40,890 우리가 원하는 물건의 종류. 35 00:01:40,890 --> 00:01:51,570 그래서, 당신은 지난 주 기억 해보면, 다윗이 도입 된 세 프로그램 36 00:01:51,570 --> 00:01:53,560 정말 빠르게. 37 00:01:53,560 --> 00:01:57,010 우리가 할거야 그래서 일단은 정수에 대한 사용자 요청 38 00:01:57,010 --> 00:01:58,800 방에있는 사람 수. 39 00:01:58,800 --> 00:02:01,260 우리는 그 정수가 있으면, 우리는 배열을 선언하고 있습니다. 40 00:02:01,260 --> 00:02:02,890 이 부류의 구문을 확인합니다. 41 00:02:02,890 --> 00:02:04,540 당신은 익숙해 질 것입니다. 42 00:02:04,540 --> 00:02:09,430 >> 그래서 우리는 정수의 배열을 선언하고 연령이라고하고, N 거기 43 00:02:09,430 --> 00:02:12,080 이 배열의 정수. 44 00:02:12,080 --> 00:02:16,480 여기 그래서이 패턴이 4 INT 나는 플러스, 내가 미만 n은 0과 동일 45 00:02:16,480 --> 00:02:20,580 플러스, 그 또한 패턴이 될 것입니다 당신은 매우 익숙해있다. 46 00:02:20,580 --> 00:02:24,000 그것은 거의 당신이있어 방법 때문에 항상 배열을 반복하는 것. 47 00:02:24,000 --> 00:02:26,330 그래서 n은 기억 우리의 배열의 길이. 48 00:02:26,330 --> 00:02:32,120 그리고 여기, 우리는 반복적으로 요구하고있다 방에있는 사람의 난의 나이에. 49 00:02:32,120 --> 00:02:36,640 >> 이 후, 우리가 내려 가서, 무엇을 위해 임의의 이유로, 우리는 다음 50 00:02:36,640 --> 00:02:40,220 그들이려고 얼마나 오래된 인쇄 지금부터 해가 될 수 있습니다. 51 00:02:40,220 --> 00:02:49,980 그리고 그 프로그램을 실행하면,하자 , 연령을 슬래시 세 점. 52 00:02:49,980 --> 00:02:53,010 그래서 방에있는 사람 수, 의 세 가지가있다 가정 해 봅시다. 53 00:02:53,010 --> 00:02:59,880 그리고, 첫 번째 사람은 13이다, 말 다음에 (26)이고, 최후로 30이다. 54 00:02:59,880 --> 00:03:05,080 그래서 다음은이 세 가지를 반복합니다 사람들은 14 중 27, 31를 인쇄 할 수 있습니다. 55 00:03:05,080 --> 00:03:16,060 >> 그래서 기억이 우리를 선언 할 때 크기 n의 배열이있는 인덱스 56 00:03:16,060 --> 00:03:19,950 배열, 배열 값을 가지고 있으며, 인덱스 0, 1, 2, 줄곧 57 00:03:19,950 --> 00:03:21,680 최대 N 마이너스 1. 58 00:03:21,680 --> 00:03:26,255 그래서 우리는 말할 때 세 사람이 있었다 방에, 우리는 여기에 넣어 59 00:03:26,255 --> 00:03:29,850 본 내지 제 반복 루프, 난 0이 될 것입니다. 60 00:03:29,850 --> 00:03:31,650 그래서 인덱스 0. 61 00:03:31,650 --> 00:03:34,540 우리는 처음을 할당 사용자가 입력 한 나이. 62 00:03:34,540 --> 00:03:38,870 그런 다음 하나에, 우리는 입력하고 제 2 n 사용자가 입력하고있는 63 00:03:38,870 --> 00:03:40,580 두, 마지막 n 옆에. 64 00:03:40,580 --> 00:03:44,200 >> 그래서 알이 크기의 배열 세 아무것도하지 않습니다 65 00:03:44,200 --> 00:03:46,040 인덱스 세에. 66 00:03:46,040 --> 00:03:49,036 이 유효하지 않습니다. 67 00:03:49,036 --> 00:03:50,250 괜찮아요. 68 00:03:50,250 --> 00:03:55,136 그래서, 다시 여기에 가고. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 그래서 지금 우리가 배열을 처리 한 것으로, 저희는 어느 정도 익숙해야합니다. 71 00:04:01,590 --> 00:04:03,780 이제 우리는 명령에 움직일 수있을거야 가 될 수 있습니다 줄 인수 72 00:04:03,780 --> 00:04:05,890 이 문제 세트에 꽤 관련. 73 00:04:05,890 --> 00:04:09,670 >> 그래서 지금까지, 할 때마다 당신은했습니다 메인 함수를 선언, 우리는했습니다 74 00:04:09,670 --> 00:04:11,230 주요 int 무효 말했다. 75 00:04:11,230 --> 00:04:14,070 그래서 공간은 의미 우리는 전달되지 않습니다 76 00:04:14,070 --> 00:04:16,440 이 함수에 대한 인수. 77 00:04:16,440 --> 00:04:19,190 이제 우리는 주를 만날 수있을 거예요 일부 인수를 취할 수 있습니다. 78 00:04:19,190 --> 00:04:22,470 여기에서 우리는 ARGC INT를 호출 문자열 argv와 브래킷. 79 00:04:22,470 --> 00:04:26,930 브래킷은, 다시 한 번, 표시 우리는 배열을 다루고있다. 80 00:04:26,930 --> 00:04:31,850 그래서 여기, 문자열 argv와 브래킷, 우린 문자열 배열을 처리. 81 00:04:31,850 --> 00:04:35,360 그래서 ARGC, 그 나타내는 것 우리는 얼마나 많은 인수 82 00:04:35,360 --> 00:04:37,580 이 프로그램에 전달. 83 00:04:37,580 --> 00:04:46,050 그리고, 그게 무슨 뜻인지 확인합니다 의이을 닫습니다 수 있습니다. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 그래서 지금까지 우리는 모든을 실행했습니다 점 슬래시 나이와 같은 프로그램입니다. 86 00:04:50,790 --> 00:04:55,250 우리는 할 수 있습니다 또한, 명령 줄에서, 지난 인수를 전달, 따라서 용어, 명령 87 00:04:55,250 --> 00:04:56,550 행 인수. 88 00:04:56,550 --> 00:04:59,760 그래서 첫 번째 인수, 안녕하세요. 89 00:04:59,760 --> 00:05:03,350 그래서 여기, ARGC 세 것입니다. 90 00:05:03,350 --> 00:05:07,720 그것은 인수의 수의 명령 줄에서. 91 00:05:07,720 --> 00:05:12,840 ARGC 항상 적어도 하나이므로 닷 자체 나이를 슬래시의 하나로서 계산 92 00:05:12,840 --> 00:05:14,490 명령 줄 인수. 93 00:05:14,490 --> 00:05:17,010 >> 그런 인사는 처음이다. 94 00:05:17,010 --> 00:05:20,460 점 슬래시 나이는, 제로 번째의 경우 안녕하세요 최초, 세계는 95 00:05:20,460 --> 00:05:22,830 두 번째 명령 줄 인수. 96 00:05:22,830 --> 00:05:29,490 그래서 문자열 ARGV, 우리는 보게 될 것입니다, 문자열, 점 슬래시를 포함 97 00:05:29,490 --> 00:05:33,830 세,여보세요, 세계. 98 00:05:33,830 --> 00:05:38,945 그리고 다윗의 요청에 의해, 우리는거야 그 소개 동영상을 재생합니다. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [동영상 재생] 101 00:05:43,890 --> 00:05:46,240 >> 업 위브 프로그램에서 지금까지 서면, 우리는 선언했습니다 102 00:05:46,240 --> 00:05:48,500 메인 화면 주요 int 무효. 103 00:05:48,500 --> 00:05:51,170 그리고이 모든 시간, 그 공간에는 단순히 지정되어 그 104 00:05:51,170 --> 00:05:54,430 프로그램은 고려하지 않았 음 명령 줄 인수. 105 00:05:54,430 --> 00:05:57,750 사용자가 실행하는 즉, 프로그램, 그 또는 그녀는 명령을 제공 할 수있다 106 00:05:57,750 --> 00:06:01,710 추가를 작성하여 줄 인수 단어 나 구 후 프로그램의 107 00:06:01,710 --> 00:06:03,000 프롬프트에 이름을 지정합니다. 108 00:06:03,000 --> 00:06:06,550 >> 글쎄, 당신은 당신의 프로그램을 원하는 당신이 경우에 명령 줄 인수 하나를 가지고 109 00:06:06,550 --> 00:06:10,540 더 그런 말은, 우리는 교체해야 인수의 부부와 함께 무효화. 110 00:06:10,540 --> 00:06:12,200 그럼 그렇게합시다. 111 00:06:12,200 --> 00:06:15,750 CS50.h. 포함 112 00:06:15,750 --> 00:06:19,360 표준 io.h. 포함 113 00:06:19,360 --> 00:06:20,760 주이자. 114 00:06:20,760 --> 00:06:26,330 그리고 지금, 대신 무효, 나는에 갈거야 ARGC라는 중간, 및을 지정 115 00:06:26,330 --> 00:06:28,780 ARGV라는 문자열 배열입니다. 116 00:06:28,780 --> 00:06:31,820 이제, argc와 argv에 있습니다 단순히 규칙. 117 00:06:31,820 --> 00:06:34,000 >> 우리는이 인수를 호출 한 수 우리가 원하는 거의 모든 작업. 118 00:06:34,000 --> 00:06:37,630 그러나 중요한 것은 ARGC는 것입니다 INT 정의함으로써,이 때문에 119 00:06:37,630 --> 00:06:41,360 인수의 수를 포함하는 것, 총 워드 수 그 120 00:06:41,360 --> 00:06:43,380 사용자는 자신의 프롬프트에 입력하고있다. 121 00:06:43,380 --> 00:06:47,910 ARGV 한편, 인수 벡터이며, 실제로 저장하는 배열 될 것 122 00:06:47,910 --> 00:06:52,020 사용자가 가지고있는 모든 단어 자신의 프롬프트에 입력했습니다. 123 00:06:52,020 --> 00:06:54,500 >> 의 지금은 뭔가를 계속하자 이들 중 하나 이상과 함께 124 00:06:54,500 --> 00:06:55,660 명령 줄 인수. 125 00:06:55,660 --> 00:07:00,070 특히,의 전방 및 인쇄 가자 어떤 단어를 사용자가 입력 126 00:07:00,070 --> 00:07:03,960 프로그램의 이름 뒤에 프롬프트에서. 127 00:07:03,960 --> 00:07:04,730 오픈 브라켓. 128 00:07:04,730 --> 00:07:06,240 대괄호. 129 00:07:06,240 --> 00:07:10,510 printf의 퍼센트의 백 슬래시와 쉼표. 130 00:07:10,510 --> 00:07:14,550 그리고 지금은 printf의 어떤 값을 말할 필요 그 자리에 연결합니다. 131 00:07:14,550 --> 00:07:18,600 나는 사용자가 가지고있는 첫 번째 단어를 원하는 프로그램의 이름을 입력 한 후, 132 00:07:18,600 --> 00:07:23,130 그래서 내가 지정하는거야 ARGV 브래킷 1, 가까운 133 00:07:23,130 --> 00:07:24,830 괄호, 세미콜론. 134 00:07:24,830 --> 00:07:27,290 >> 이제, 브라켓 1이 아닌 브래킷 0? 135 00:07:27,290 --> 00:07:30,990 음, 자동 저장, 밝혀 ARGV에 0이 될 것입니다 136 00:07:30,990 --> 00:07:32,620 프로그램의 실제 이름. 137 00:07:32,620 --> 00:07:36,180 그래서 첫 번째 단어가 사용자 유형 프로그램의 이름으로, 후 138 00:07:36,180 --> 00:07:38,990 대회가 될 것 ARGV 1에 저장됩니다. 139 00:07:38,990 --> 00:07:42,380 의 지금 컴파일하자 이 프로그램을 실행을 클릭합니다. 140 00:07:42,380 --> 00:07:47,780 >> ARGV 0 점 슬래시 ARGV 0을 확인합니다. 141 00:07:47,780 --> 00:07:50,520 그리고 지금은 단어 안녕하세요있다. 142 00:07:50,520 --> 00:07:51,670 입력합니다. 143 00:07:51,670 --> 00:07:53,520 그리고 거기에 우리는여보세요, 그것이있다. 144 00:07:53,520 --> 00:07:55,750 >> [END 동영상 재생] 145 00:07:55,750 --> 00:07:57,000 >> ROB BODEN : 좋습니다. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 그를 닫습니다. 148 00:08:01,230 --> 00:08:16,730 그래서 프로그램에 모습을 복용하는 우리는 그냥 잘, 우리에게 단지 소개 149 00:08:16,730 --> 00:08:24,710 우리는 0 ARGV 인쇄하면 지금, 확인, 표시합니다 그것은, ARGV 0 점 슬래시 ARGV 0 것입니다. 150 00:08:24,710 --> 00:08:30,440 예상대로 따라서, 그것은 밖으로 인쇄하는 것 ARGV 0이기 때문에, 프로그램의 이름 151 00:08:30,440 --> 00:08:32,970 항상 될 것 프로그램의 이름입니다. 152 00:08:32,970 --> 00:08:35,640 그러나의 뭔가를하자 더 흥미로운 비트. 153 00:08:35,640 --> 00:08:42,080 >> 그래서 문제 세트에, 당신은 할 수 있습니다 이 기능 atoi와 소개. 154 00:08:42,080 --> 00:08:44,440 그래서 우리는 무엇을 위해 atoi와 사용합니까? 155 00:08:44,440 --> 00:08:48,550 즉, 변환 것 정수 문자열입니다. 156 00:08:48,550 --> 00:08:53,280 그래서 문자열을 전달하는 경우, 1 ~ 2 세, atoi와에, 그 변환 거 야 157 00:08:53,280 --> 00:08:56,910 정수로, 1 ~ 2 세. 158 00:08:56,910 --> 00:09:01,480 그래서 우리는 첫 번째로 변환하는거야 정수에 대한 명령 행 인수, 159 00:09:01,480 --> 00:09:05,690 다음 그냥 정수를 인쇄 할 수 있습니다. 160 00:09:05,690 --> 00:09:09,680 >> 그러니까 기본적으로, 우리는 가지입니다 다만 getInt를 재 구현 161 00:09:09,680 --> 00:09:12,350 정수는 명령에 입력 라인 대신 프로그램 162 00:09:12,350 --> 00:09:14,560 대화. 163 00:09:14,560 --> 00:09:23,170 그럼, ARGV 0을 만들고, 이제하자 여기에 그것을, 그 닫습니다. 164 00:09:23,170 --> 00:09:27,670 그래서 argv에 0을 실행하고의 입력하자 정수, 1 개 2 개 3 개 4 개 1 ~ 2. 165 00:09:27,670 --> 00:09:30,840 따라서, 하나의 정수를 인쇄 할 수 있습니다 2 개 3 개 4 개 1 ~ 2. 166 00:09:30,840 --> 00:09:35,500 그 atoi와 몇 가지 미묘한 차이가 있습니다 그것은 아무것도에 대한 배려가 중단 167 00:09:35,500 --> 00:09:39,040 유효 숫자 문자를 넘어, 하지만 그건 중요하지 않습니다. 168 00:09:39,040 --> 00:09:42,870 >> 그래서 당신은 무슨 생각하세요 나는이 작업을 수행 할 경우?에게 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 세그먼트 오류. 171 00:09:47,050 --> 00:09:50,410 왜 그럴까요? 172 00:09:50,410 --> 00:09:56,060 당신이 우리의 프로그램에서 다시 보면, 우린 ARGV 1, 첫 번째 인수로 변환 173 00:09:56,060 --> 00:09:59,610 프로그램 이름 뒤에, 정수. 174 00:09:59,610 --> 00:10:03,350 그러나 전달 된 인수가 없습니다 프로그램 이름 뒤에. 175 00:10:03,350 --> 00:10:08,060 그래서 여기, 우리는이 버그가 있음을 확인 프로그램 이후, 우리는 그것을 실행하려고하면 176 00:10:08,060 --> 00:10:10,530 인수하지 않고, 그냥 충돌합니다. 177 00:10:10,530 --> 00:10:16,950 >> 당신이 볼 수 그래서 다른 일반적인 패턴 뭔가 같은 ARGC이 적은 경우 178 00:10:16,950 --> 00:10:21,100 가 없음을 나타내는 두 개의보다 적어도 프로그램 명과 179 00:10:21,100 --> 00:10:29,100 첫 번째 인수, 우리는 뭔가를 할 수 있습니다 등의 printf 충분하지 180 00:10:29,100 --> 00:10:31,190 명령 줄 인수. 181 00:10:31,190 --> 00:10:33,170 그건 아마 인쇄 할 좋은 아니에요, 그것은처럼, 아마 뭔가 182 00:10:33,170 --> 00:10:35,440 당신은 정수를 입력해야합니다 명령 줄에서. 183 00:10:35,440 --> 00:10:37,450 난 그냥 거기에 종료됩니다. 184 00:10:37,450 --> 00:10:39,600 그리고 1을 반환합니다. 185 00:10:39,600 --> 00:10:44,740 따라서 우리의 말에 그 기억 프로그램, 우리는 0을 반환하는 경우, 그 종류의 186 00:10:44,740 --> 00:10:47,060 성공을 나타냅니다. 187 00:10:47,060 --> 00:10:50,940 그리고 주 자동 당신이 경우에 0을 반환합니다. 188 00:10:50,940 --> 00:10:55,800 >> 그래서 여기, 우리는 나타 내기 위해 1을 다시 튜닝하고 그 성공이 아니라고. 189 00:10:55,800 --> 00:11:01,000 그리고 당신은 당신이 원하는 무엇이든 반환 할 수 있습니다, 다만, 0은 성공을 의미하고, 190 00:11:01,000 --> 00:11:03,390 다른 건 실패를 나타냅니다. 191 00:11:03,390 --> 00:11:04,855 그래서 사물의이 버전을 실행하자. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 그래서 지금, 우리는 명령 줄을 입력하지 않으면 인수는 정확하게 말해주지 194 00:11:16,600 --> 00:11:18,290 우리 충분히 명령 줄 수 없습니다. 195 00:11:18,290 --> 00:11:20,610 문장을 완성하지 않았다. 196 00:11:20,610 --> 00:11:24,950 그렇지 않으면, 우리는 실제로 한을 전달하는 경우, 그것은 프로그램을 완성 할 수있다. 197 00:11:24,950 --> 00:11:27,920 그래서 이것은 당신이에 ARGC를 사용하는 방법입니다 의 개수를 확인하기 위하여 198 00:11:27,920 --> 00:11:30,630 명령 줄 인수가 실제로 전달됩니다. 199 00:11:30,630 --> 00:11:39,360 >> 그럼 조금 더이 프로그램을 만들어 보자 복잡하고, 제 보면 200 00:11:39,360 --> 00:11:42,180 일의 반복. 201 00:11:42,180 --> 00:11:46,310 그래서 지금, 우리는 그냥 인쇄하지 않을 첫 번째 명령 행 인수. 202 00:11:46,310 --> 00:11:51,210 여기, 우리는 int 전 등호에서 반복하고 0, 난 ARGC보다 플러스 203 00:11:51,210 --> 00:11:55,280 플러스 및 인쇄 ARGV, 인덱스 나. 204 00:11:55,280 --> 00:11:59,300 따라서,이 패턴은, 다시이 동일 대신에를 제외하고 이전과 패턴, 205 00:11:59,300 --> 00:12:02,600 변수를 호출 N, 우리는 ARGC을 사용하고 있습니다. 206 00:12:02,600 --> 00:12:09,520 >> 그래서이 각 인덱스 반복된다 어레이에서, 각 인쇄보기 207 00:12:09,520 --> 00:12:11,910 해당 배열에있는 요소입니다. 208 00:12:11,910 --> 00:12:20,300 그래서, 우리는이 프로그램을 실행할 때, 잘, 어떤 명령 줄을 입력하지 않은 209 00:12:20,300 --> 00:12:22,540 인수, 그냥 인쇄 그렇게 프로그램 이름. 210 00:12:22,540 --> 00:12:26,053 나는 사물의 무리를 입력하면, 거 하나, 자신의 행에 각을 인쇄 할 수 있습니다. 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> OK. 213 00:12:32,210 --> 00:12:34,770 그래서 한 단계 더 나아가 보겠습니다. 214 00:12:34,770 --> 00:12:38,890 대신 각 인수를 인쇄 자신의 라인에서의 각을 인쇄 할 수 215 00:12:38,890 --> 00:12:42,590 각 인수의 문자 한 줄에. 216 00:12:42,590 --> 00:12:46,700 그래서 ARGV가 있음을 유의 문자열의 배열입니다. 217 00:12:46,700 --> 00:12:50,960 그래서 문자열이지만, 문자의 배열? 218 00:12:50,960 --> 00:12:57,140 그래서 ARGV 정말 있음을 의미 문자 배열의 배열. 219 00:12:57,140 --> 00:13:04,920 그래서 활용, 의 지금은이를 무시하자. 220 00:13:04,920 --> 00:13:08,190 그냥 문자열 변수는 argv 0을 생각해 보자. 221 00:13:08,190 --> 00:13:14,170 >> 우리는 각 문자를 가지고 싶다면 ARGV 0의 줄에, 그럼 내가 원하는 222 00:13:14,170 --> 00:13:19,500 우리가 사용하던 패턴을 수행하기 위해, 나는이다 어레이의 길이보다 작은, 223 00:13:19,500 --> 00:13:23,990 여기의 나 strlen되는, 그건 내가하고 싶지 않은 어떤 문자열 224 00:13:23,990 --> 00:13:26,450 의는 ARGV 0 같습니다. 225 00:13:26,450 --> 00:13:30,390 그래서 나는 우리의 길이보다 작 이 경우 배열 배열, 226 00:13:30,390 --> 00:13:34,410 자, 내가 플러스 플러스. 227 00:13:34,410 --> 00:13:41,040 우리는 지난 주에 본대로 그리고, 그것은 이상적 우리는 외부 나 strlen 것을 이동하는 경우 228 00:13:41,040 --> 00:13:45,210 조건으로, 이후 N이 추가됩니다 의의 나 strlen 우리가 갈 때마다 229 00:13:45,210 --> 00:13:47,720 루프를 통해, 그리고의 변경 될 수 없습니다. 230 00:13:47,720 --> 00:13:50,230 그래서 우리는 여기에 N과 동일하게 설정합니다. 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> OK. 233 00:13:55,170 --> 00:14:01,320 그래서 지금, 우리는 반복하는거야 배열의 각 인덱스. 234 00:14:01,320 --> 00:14:05,630 그리고, 우리는 서로를 인쇄하려면 그 배열 %의 C의 문자입니다 235 00:14:05,630 --> 00:14:06,880 우리가 사용하고자하는 플래그 문자. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 그리고 지금 브래킷 내가 될 것입니다 문자열 인덱스 문자 I, 그렇다면 238 00:14:19,770 --> 00:14:20,970 문자열 인사했다. 239 00:14:20,970 --> 00:14:27,530 다음 부류는, 0 시간이 될 것입니다 토 1 등 전자, 그리고 것입니다. 240 00:14:27,530 --> 00:14:30,800 >> 그래서 지금 우리는 결합 할 이 두 가지. 241 00:14:30,800 --> 00:14:35,440 우리는 각 문자를 인쇄 할 각 명령 줄 인수. 242 00:14:35,440 --> 00:14:38,950 그래서 우리는해야 할 것입니다 루프 중첩. 243 00:14:38,950 --> 00:14:47,480 종래, 제 1 카운터 나는, 다음은 일본이 될 것, N입니다 244 00:14:47,480 --> 00:14:54,450 ARGV의 난의 나 strlen 될 것입니다, 나는 n보다 작은, 나 플러스 플러스입니다. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 그리고 지금 대신 인쇄 ARGV의 난의, 그래서 내가 인덱스에가는 ARGV 브라켓 - 247 00:15:06,870 --> 00:15:14,280 즉, i 번째 명령 행이 될 것 인수 ARGV는 I, J는 것입니다 248 00:15:14,280 --> 00:15:16,925 j 번째 문자의 수 i 번째 인수. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 지금 여기의 최대 제거합니다 우리는 루프에 넣어 때문이다. 251 00:15:24,810 --> 00:15:33,900 그래서 문자열의 같음과 동일합니다 ARGV 난 다음의 브래킷 J. 252 00:15:33,900 --> 00:15:36,980 >> 음, 우리는 선언 할 필요가 없습니다 이 변수의. 253 00:15:36,980 --> 00:15:44,530 대신, 우리는이를 결합합니다 우리가했던 일에 두 사람은, J를 나는 argv를. 254 00:15:44,530 --> 00:15:45,780 >> 스피커 1 : [청취]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB BODEN : 좋은 전화. 257 00:15:49,680 --> 00:15:52,936 그래서이 고장입니다. 258 00:15:52,936 --> 00:15:55,510 나는 실제로 그것을 실행하는 경우, 우리는 것 이를 실현했다. 259 00:15:55,510 --> 00:16:01,210 내가 걱정 그래서 카운터 이 특히 260 00:16:01,210 --> 00:16:05,410 루프는 J, 반복자입니다. 261 00:16:05,410 --> 00:16:08,560 그래서 당신은 문제로 실행하는 것, 아마도 무한 루프, 만약에 우리 262 00:16:08,560 --> 00:16:09,540 그 고정하지 않았다. 263 00:16:09,540 --> 00:16:12,220 우리는 또한 이야기​​하고있는 이유 오늘에 대해 디버깅. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 그래서이 프로그램을 실행 할 수 있습니다. 266 00:16:15,240 --> 00:16:21,200 그리고 이제 실제로 별도의 printf를 추가 할 수 바로 여기에 바로 인쇄 할 267 00:16:21,200 --> 00:16:27,480 이것이 의미하기 때문에 다른 줄 때 우리 프로그램을 실행, 빈있을거야 268 00:16:27,480 --> 00:16:31,830 각 문자의 사이에있는 라인 각 명령 행 인수. 269 00:16:31,830 --> 00:16:33,448 음, 우리는 그게 무슨 뜻인지 볼 수 있습니다. 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 OOP. 272 00:16:37,790 --> 00:16:39,870 몇 가지 버그를 얻었다. 273 00:16:39,870 --> 00:16:42,860 오류 암시 적으로 선언 라이브러리 함수 나 strlen. 274 00:16:42,860 --> 00:16:51,630 >> 그래서 우리의 프로그램에 다시 가고, I string.h에 포함 해시 잊어 버렸습니다. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 그래서 string.h에이 될 것입니다 선언 헤더 파일 277 00:16:57,730 --> 00:16:58,980 함수 나 strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, 그것은 컴파일합니다. 280 00:17:06,060 --> 00:17:09,109 이제 그것을 실행하자. 281 00:17:09,109 --> 00:17:10,930 그래서 그냥. 282 00:17:10,930 --> 00:17:17,790 그것은 인쇄 할거야 우리의 프로그램 이름, 안녕하세요. 283 00:17:17,790 --> 00:17:23,510 각 각 일을 인쇄 할 것 한 줄에 문자입니다. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> 그럼 실제로 보자 한 단계. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 대신 string.h에를 사용하는의에게하자 우리는 우리 자신을 구현하는 것입니다 방법에 대해 생각 288 00:17:39,700 --> 00:17:41,420 나 strlen 기능. 289 00:17:41,420 --> 00:17:45,600 그래서 나는 즉시 줄 것이다 함수 서명. 290 00:17:45,600 --> 00:17:52,900 그럼 my_strlen에 전화를하자, 그리고의 인수로 문자열을 걸릴 것, 291 00:17:52,900 --> 00:17:57,220 우리는 반환 할 것으로 예상 해당 문자열의 길이. 292 00:17:57,220 --> 00:18:03,430 그래서 말인데, 그 사람이야? 293 00:18:03,430 --> 00:18:04,990 예. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 그래서 이전 슬라이드에서 기억이 지난 주부터도했다 296 00:18:12,900 --> 00:18:18,890 문자의 배열, 잘, 문자열, 그래서이 우리의 문자열의라고 할 수 있습니다. 297 00:18:18,890 --> 00:18:29,870 그래서의 문자열 인 경우,여보세요, 다음, H-E-L-L-O, 메모리, 그 것 298 00:18:29,870 --> 00:18:35,610 다음이 백 슬래시보기, 그리고 0 문자. 299 00:18:35,610 --> 00:18:39,170 >> 그래서 우리가 어떻게의 길이를받을 수 있나요? 300 00:18:39,170 --> 00:18:43,190 음, 트릭이를 찾고 있습니다 0 문자,이 널 (null)을 백래쉬 301 00:18:43,190 --> 00:18:44,380 터미네이터. 302 00:18:44,380 --> 00:18:50,270 그래서 알고리즘 예정 거의 같은 것을 할 수 303 00:18:50,270 --> 00:18:51,510 충분히 문자가 - 304 00:18:51,510 --> 00:18:56,180 의이 손을 표현하자 카운터의이 INT 길이를 호출 할 수 있습니다. 305 00:18:56,180 --> 00:19:00,060 그래서, 여기부터, 우린 우리의 문자열을 반복하는 것. 306 00:19:00,060 --> 00:19:04,100 >> 그래서, 그것은 H는 첫 번째 문자의, 그리고 다시, 그래서 0을 슬래시 아니에요 307 00:19:04,100 --> 00:19:05,170 길이는 1입니다. 308 00:19:05,170 --> 00:19:08,050 다음 문자로 반복, E,는 0을 백 슬래시 아니에요. 309 00:19:08,050 --> 00:19:09,630 길이는 2입니다. 310 00:19:09,630 --> 00:19:10,960 L, 3. 311 00:19:10,960 --> 00:19:11,850 L, 4. 312 00:19:11,850 --> 00:19:13,050 O, 5. 313 00:19:13,050 --> 00:19:16,690 그리고 마지막으로, 우리는 백 슬래시에 도달 0, 그래서 그 말, 잘, 314 00:19:16,690 --> 00:19:17,780 이 문자열은 끝났어. 315 00:19:17,780 --> 00:19:20,130 그럼 5를 반환 할 수 있습니다. 316 00:19:20,130 --> 00:19:33,630 >> 그래서 사실, 첫 번째, 그 구현 내 N 길이는 오른손, 0 같습니다. 317 00:19:33,630 --> 00:19:36,088 그리고 우리는 반복하는 것입니다 - 318 00:19:36,088 --> 00:19:38,000 >> 스피커 1 : [청취] 319 00:19:38,000 --> 00:19:38,640 >> ROB BODEN : 아, 촬영. 320 00:19:38,640 --> 00:19:39,870 좋은 전화. 321 00:19:39,870 --> 00:19:42,680 붐. 322 00:19:42,680 --> 00:19:44,140 그래서 N 길이는 0과 같습니다. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 그래서 지금, 동안의 길이는하지 않습니다 다음 동일하고, 백 슬래시 0. 325 00:19:58,310 --> 00:20:04,660 그래서,이 백 슬래시 0 기억, 그것은이다 실제 문자와 그 의미 326 00:20:04,660 --> 00:20:05,820 문자열의 끝. 327 00:20:05,820 --> 00:20:09,850 그냥 같은, 또한, 백 슬래시 n은 실제 문자입니다. 328 00:20:09,850 --> 00:20:14,040 백 슬래시 0 표시하는 것입니다 우리의 문자열의 끝. 329 00:20:14,040 --> 00:20:15,414 나는 거기에 걸 원하지 않아. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 그리고 길이에 의해 색인의이되지 않는 동안 널 (NULL) 종료 자에 해당하고 332 00:20:25,620 --> 00:20:27,130 우리는 단지 길이를 증가시키는 것입니다. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 그럼, 우리의 프로그램의 끝에 길이는 결국 예정 335 00:20:34,880 --> 00:20:37,610 이 경우 5합니다. 336 00:20:37,610 --> 00:20:39,210 그리고 우리는 단지 길이를 반환합니다. 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> OK. 339 00:20:43,530 --> 00:20:48,290 그래서 지금 여기까지, 난 몰라 my_strlen 않습니다. 340 00:20:48,290 --> 00:20:50,700 의가 있는지 확인하기 위해 컴파일하자 모든 원활하게 실행. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 나는 2 일을 했습니까? 343 00:20:58,210 --> 00:21:00,565 또는 1 있음을했다? 344 00:21:00,565 --> 00:21:01,940 즉해야한다. 345 00:21:01,940 --> 00:21:02,690 괜찮아요. 346 00:21:02,690 --> 00:21:08,490 그래서이 변수는 argv 2입니다. 347 00:21:08,490 --> 00:21:11,585 예상대로 작동하지만 하나는 내가 그것을에서했던 것이 었습니다? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 예. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 일의이 버전은하지 않았다 printf의 새로운 후 라인 만 352 00:21:21,820 --> 00:21:22,910 어떤 차이를 만들 수 없습니다. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 예상대로 그렇게했다. 355 00:21:25,780 --> 00:21:34,750 >> 이제 우리는 심지어이 한 단계를 결합 할 수 있습니다 또한, 여기에 위치를 통보, 잘, 356 00:21:34,750 --> 00:21:38,920 첫째, 우리는 ARGV의 strlen 함수를 잡는거야 나는, 그리고 우리는 반복하는거야 357 00:21:38,920 --> 00:21:41,450 해당 문자열의 각 문자. 358 00:21:41,450 --> 00:21:47,480 그래서 그 대신 그 일을, 만약에 우리 단지 대기의이 논리를 결합 359 00:21:47,480 --> 00:21:50,740 우리는 백 슬래시 0 권리를 칠 때까지 루프이에? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 ARGV의 I, J가 수행하는 동안 그래서 반복 동일하지 않은 백 슬래시 0. 362 00:22:07,490 --> 00:22:10,680 그럼 먼저 실행하자. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> 괜찮아요. 365 00:22:21,180 --> 00:22:27,655 그래서 여기,이 조건은 말하고있다 - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 의 그 선택을 취소 할 수 있습니다. 368 00:22:40,060 --> 00:22:49,140 그래서 지금이 우리의 ARGV하자. 369 00:22:49,140 --> 00:22:55,290 그래서 난 그냥 전에 해당 프로그램을 실행했을 때, ARGV 문자열의 배열입니다. 370 00:22:55,290 --> 00:23:03,100 그래서, 나는 점 슬래시 ARGV로 실행하는 경우 2, 안녕하세요, 다음 ARGV 371 00:23:03,100 --> 00:23:07,650 자체 ARGV를 들어, 길이 3입니다 영,여보세요, 세계. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> 이러한 인덱스의 각각의 내부이고, 자신이있을거야 배열, 374 00:23:19,660 --> 00:23:23,780 점은,이 슬래시 될 것입니다, 난 몰라 그 올바른 방향 인 경우, I 375 00:23:23,780 --> 00:23:25,680 는 생각하지 않습니다. 376 00:23:25,680 --> 00:23:30,110 A-R-V 대시는 더 많은 공간이 필요합니다. 377 00:23:30,110 --> 00:23:32,570 의이 배열로 잘라 보자. 378 00:23:32,570 --> 00:23:38,230 A-R-V 대시 0을 입력 한 다음 백 슬래시 0. 379 00:23:38,230 --> 00:23:43,160 그리고 혼란에 인사 할 것이다. 380 00:23:43,160 --> 00:23:45,910 의는, H-E의 백 슬래시 0을 가정 해 봅시다. 381 00:23:45,910 --> 00:23:51,130 그리고 마지막으로, W-O 백 슬래시 0. 382 00:23:51,130 --> 00:23:59,730 >> 그래서 우리가 쓴 알고리즘, 그들이 왜 왔는지 루프에 대한 중첩 383 00:23:59,730 --> 00:24:07,321 IS하고, 우리가 처음이 나는 다음 J 카운터. 384 00:24:07,321 --> 00:24:15,206 이에 코드 쉬울 것 화면의 다시이에 가자. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 그래서 난의 반복자 것을 알 각 명령 반복 387 00:24:24,600 --> 00:24:25,610 행 인수. 388 00:24:25,610 --> 00:24:28,870 j는 반복자 반복하는 것입니다 그의 각 문자에 389 00:24:28,870 --> 00:24:30,410 명령 줄 인수. 390 00:24:30,410 --> 00:24:46,755 그래서이 안쪽의 printf가 무엇을하고 있는지 우리는 ARGV 0, 0의 printf에게 printf를했다한다 391 00:24:46,755 --> 00:24:58,680 ARGV 0 1의 printf ARGV 0 2 0 3 0 4 0 5, 0 6,하지만 지금은, ARGV 0 (7) 예정 392 00:24:58,680 --> 00:25:00,670 같은 백 슬래시 0. 393 00:25:00,670 --> 00:25:05,730 >> 그래서 우리는 for 루프를 종료, 지금은 1로 반복. 394 00:25:05,730 --> 00:25:10,910 그리고 지금 우리는 인쇄에가는거야 ARGV 1 0, ARGV 1 - 395 00:25:10,910 --> 00:25:17,040 자, 이제, 내가 짧은 인사 잘라 있기 때문에, ARGV 1 2가 다시 될 것입니다 396 00:25:17,040 --> 00:25:18,170 백 슬래시 0. 397 00:25:18,170 --> 00:25:25,050 그래서, 나는 계속 증가하고, 그래서, 할 때까지 우리는 모든 인쇄 398 00:25:25,050 --> 00:25:28,580 세계, 그리고 그 세 개의 명령 줄입니다 인수, 우리는 나갈거야 399 00:25:28,580 --> 00:25:31,670 가장 바깥 쪽 루프와 우리의 프로그램을 완성하고 있습니다. 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 OK. 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> 그래서 여기에 다시 올 수 있습니다. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 그래서 어느 정도 익숙 얻을 수 있습니다 여기에 명령 줄 인수 406 00:25:52,370 --> 00:25:54,460 특정 문제를 설정합니다. 407 00:25:54,460 --> 00:25:56,630 >> 이제 디버깅. 408 00:25:56,630 --> 00:26:01,680 그래서 당신은 아마 이미 수행해야했다 이전의 일부 디버깅 409 00:26:01,680 --> 00:26:03,120 문제는 설정. 410 00:26:03,120 --> 00:26:08,420 그리고 디버깅 중 하나 아주 쉬운 방법, 먼저, 버그가 프로그램을 살펴 보자. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 음,,이 프로그램을 통해 산책 우리를 사용자에게 물어거야 413 00:26:23,830 --> 00:26:29,350 정수, 그 정수를 잡아, 다음, 임의로, 우리는 while 루프를 가질 수 414 00:26:29,350 --> 00:26:32,280 다만 감소하는 것입니다 그것은 10와 동일한의 I 때까지. 415 00:26:32,280 --> 00:26:35,820 하자 그냥 내가 입력 해요 가정 10보다 큰 정수입니다. 416 00:26:35,820 --> 00:26:38,700 그것은 10에 해당 될 때까지 그래서 나는 감소. 417 00:26:38,700 --> 00:26:42,630 >> 그리고 우리는 또 다른 while 루프가 내가 0 같지 않은 동안, 우린 것을 418 00:26:42,630 --> 00:26:44,540 (3)에 의해 난을 감소시킬 것. 419 00:26:44,540 --> 00:26:49,790 그래서 당신은 버그의 의도를 확인하는 경우 여기,이 내가에 감소 것이라는 점이다 420 00:26:49,790 --> 00:26:57,010 10, 다음이 while 루프의 뜻 수 1 4 7 10,,,의 감소 나, 421 00:26:57,010 --> 00:27:02,880 음의 2, 등등 5 음과에 음의 무한대에, 나 때문에 422 00:27:02,880 --> 00:27:05,920 실제로 0과 동일하지 않습니다. 423 00:27:05,920 --> 00:27:08,610 그리고,이 프로그램의 끝에서, 우리는 foo는 기능을 가지고 424 00:27:08,610 --> 00:27:12,130 인쇄 외출 내가 그. 425 00:27:12,130 --> 00:27:16,520 >> 그래서이 짧은 사소한 프로그램입니다 그리고 버그는 분명하다, 426 00:27:16,520 --> 00:27:18,790 특히 후 그냥 버그가 무엇인지했다. 427 00:27:18,790 --> 00:27:24,840 하지만, 여기에 의도가 아니라,이 힘이다 실제로 일부처럼 당신의 428 00:27:24,840 --> 00:27:30,040 마지막으로, 욕심의 솔루션 문제는 설정하고, 어쩌면 당신이 있습니까 429 00:27:30,040 --> 00:27:32,800 프로그램의 일부 무한 루프, 당신은 아무 생각이 430 00:27:32,800 --> 00:27:34,100 어떤 원인이야. 431 00:27:34,100 --> 00:27:38,690 그래서 매우 유용한 디버깅 기술 다만 printfs를 추가하는 것입니다 432 00:27:38,690 --> 00:27:40,180 모든 코드에. 433 00:27:40,180 --> 00:27:49,200 >> 그래서 나는 여기 외부에서 printf 할 첫 번째 while 루프. 434 00:27:49,200 --> 00:27:53,155 그리고 여기에는 printf의 원하는, 난 그냥 내가 인쇄 해드립니다. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 루프 동안 나는 심지어 내가 먼저 할 수 있습니다. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 외부, 두 번째 루프 동안. 439 00:28:09,040 --> 00:28:12,170 다시 한번, 내부 인쇄 여기서, 값 전​​. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 그리고 이제이 작업을 실행 할 수 있습니다. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> 그래서 점 슬래시 디버그. 444 00:28:24,800 --> 00:28:25,610 정수를 입력합니다. 445 00:28:25,610 --> 00:28:28,150 의 13을 보자. 446 00:28:28,150 --> 00:28:28,760 그리고 붐. 447 00:28:28,760 --> 00:28:33,300 우리는 우리가 무한 루프 것을 볼 두 번째 while 루프의 내부. 448 00:28:33,300 --> 00:28:36,305 그래서 지금 우리는 버그가 무엇인지. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 그러나 printf의 디버깅을 완벽하게 중대하다 하지만 프로그램을 일단 451 00:28:45,610 --> 00:28:50,560 더 길고 더 복잡가있다 더 정교한 솔루션 452 00:28:50,560 --> 00:28:51,705 가지 작업지고. 453 00:28:51,705 --> 00:28:52,955 그래서이 모든 printfs를 제거 할 수 있습니다. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 그리고의 확실히 내가하지 않았다 만들어 보자 다 치신. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> 그래서 우리가가는 프로그램 소개가 호출됩니다 458 00:29:14,180 --> 00:29:16,715 GNU 디버거 GDB. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 음, 사실, 이제 디버그를 제거 할 수 두 번째, 다시 디버깅합니다. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 음, 사실 첫 번째, 좋은 교훈 명령 줄 인수에. 463 00:29:34,440 --> 00:29:37,780 이 연타 명령 즉납니다 모든 것이 전달되는 컴파일 464 00:29:37,780 --> 00:29:41,300 명령 줄에서,이 명령 줄 인수. 465 00:29:41,300 --> 00:29:46,250 당신이 사용하는거야 그래서 정확히 어떻게 명령 줄 인수로 우리 466 00:29:46,250 --> 00:29:51,500 전에했던, 당신은 PSET에서와 의지로 2, 그 연타가 그들을 사용하는 방법입니다. 467 00:29:51,500 --> 00:30:00,070 >> 그래서 주목하는 첫 번째 플래그, 대시 ggdb3, 즉 무슨 말을, 연타, 468 00:30:00,070 --> 00:30:03,790 당신은이 파일을 컴파일해야 의도를 우리가 결국 것 469 00:30:03,790 --> 00:30:05,380 를 디버깅 할 필요가있다. 470 00:30:05,380 --> 00:30:13,840 그래서만큼 당신이 그 깃발을 가지고로, 우리는 GDB 디버그를 할 수 있습니다. 471 00:30:13,840 --> 00:30:17,380 그리고 그것은 GNU 디버거를 열 수 있습니다. 472 00:30:17,380 --> 00:30:22,920 >> 그래서 명령이 많이 있습니다 당신의 정보는 다음의 제품에 익숙해 질 필요가있다. 473 00:30:22,920 --> 00:30:27,100 처음 당신은 아마거야 즉시 필요한 것은 실행됩니다. 474 00:30:27,100 --> 00:30:28,200 그래서 무엇을 할 거 실행된다? 475 00:30:28,200 --> 00:30:30,910 그것은 우리의 프로그램을 시작하는 것입니다. 476 00:30:30,910 --> 00:30:36,180 따라서, 시작 프로그램, 프로그램을 실행 정수, 13를 위해 저희에게 요청합니다. 477 00:30:36,180 --> 00:30:39,170 그리고, 그것은 무한 루프는의 I 제거를 제외하고, 예상되는 478 00:30:39,170 --> 00:30:40,500 printfs, 그래서 우리는 심지어 볼 수 없습니다. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 정상적으로 종료. 481 00:30:44,600 --> 00:30:45,850 오. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 그것은 싸여있을 가능성이있는 모든 길 주변에 돌아 가기 - 그 무시. 484 00:30:53,640 --> 00:30:55,170 정상적으로 종료하지 않은 가정합니다. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 그에게 복잡한 대답이있다. 487 00:31:03,370 --> 00:31:07,890 >> 그래서 지금, 아주 유용하지 않습니다. 488 00:31:07,890 --> 00:31:11,480 그러니 내부에 우리의 프로그램을 실행 이 디버거는 우리에게 도움이되지 않습니다 489 00:31:11,480 --> 00:31:15,610 우리가 할 수 있었다 때문에 방법, 점은 GDB 외부에서 디버깅을 슬래시. 490 00:31:15,610 --> 00:31:21,250 그래서 하나의 명령이 당신은 아마거야 - 491 00:31:21,250 --> 00:31:22,970 나는이 종료됩니다. 492 00:31:22,970 --> 00:31:25,850 Control-D를하거나, 작업을 모두 종료합니다. 493 00:31:25,850 --> 00:31:29,550 그럼 다시 열 수 있습니다. 494 00:31:29,550 --> 00:31:31,130 >> 또 다른 명령을 당신이 아마거야 바로 원하는 495 00:31:31,130 --> 00:31:33,600 에 익숙해 휴식입니다. 496 00:31:33,600 --> 00:31:37,120 그래서 우리는 지금 주에서 중단합니다 다음 나는 그것을 설명 할 것이다. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 자, 우리는 우리가 중단 점을 설정 참조 debug.c이 라인. 499 00:31:46,370 --> 00:31:50,160 그래서 휴식 수단은 그 때 run을 입력, 프로그램은 예정 500 00:31:50,160 --> 00:31:53,560 될 때까지 계속 실행 내가 중단 점을 기록했다. 501 00:31:53,560 --> 00:31:59,390 제가 실행을 칠 때, 프로그램이 시작됩니다 그리고, 그것은 즉시로 나누기 502 00:31:59,390 --> 00:32:01,940 주요 기능에 들어간다. 503 00:32:01,940 --> 00:32:06,930 주 휴식하는 것이 될 것입니다 당신은 꽤 일반적으로 않습니다. 504 00:32:06,930 --> 00:32:11,340 >> 그리고 지금, 당신을 소개합니다 좀 더 많은 명령에. 505 00:32:11,340 --> 00:32:14,330 그것은 우리가 말하는 있다고 여기 주목 입니다 라인 11 일에 파산 506 00:32:14,330 --> 00:32:16,230 printf의 정수를 입력합니다. 507 00:32:16,230 --> 00:32:21,260 따라서 명령은 다음 방법이 될 것입니다 우리는 코드의 다음 라인으로 이동합니다. 508 00:32:21,260 --> 00:32:24,810 이것은 우리가 단계로 허용하는 것입니다 라인으로 우리의 프로그램 라인을 통해. 509 00:32:24,810 --> 00:32:26,260 그래서 다음에. 510 00:32:26,260 --> 00:32:29,820 >> 이제 라인 (12), 우리는거야 정수를 얻을 수 있습니다. 511 00:32:29,820 --> 00:32:30,450 다음. 512 00:32:30,450 --> 00:32:34,290 당신이 다시 Enter를 누르십시오 경우, 그것은거야 당신이 마지막으로 한 일을 다시 실행. 513 00:32:34,290 --> 00:32:36,480 그래서 입력 할 필요가 없습니다 다음마다. 514 00:32:36,480 --> 00:32:40,100 그래서 정수, 13을 입력합니다. 515 00:32:40,100 --> 00:32:46,940 그래서 지금, 라인 (14), 내가 더 동안 10보다, 나는 다음에 수행 할 수 있습니다. 516 00:32:46,940 --> 00:32:48,685 그리고 우리는 우리가 나는 감소거야 참조하십시오. 517 00:32:48,685 --> 00:32:50,210 그래서 우리는 다시 난을 감소시킬 것입니다. 518 00:32:50,210 --> 00:32:53,620 >> 그래서 지금, 또 다른 유용한 명령은 인쇄입니다. 519 00:32:53,620 --> 00:32:55,750 그래서 인쇄 출력 할 것입니다 변수의 값. 520 00:32:55,750 --> 00:32:57,825 의이 값을 가져 보자 변수의 i. 521 00:32:57,825 --> 00:32:58,705 나는 나가를 인쇄 할 수 있습니다. 522 00:32:58,705 --> 00:33:00,910 그것은 내가 11 말하는거야. 523 00:33:00,910 --> 00:33:03,330 이제 우리는 다음 다시 동안 나는 10보다 크다. 524 00:33:03,330 --> 00:33:05,590 그래서 난 여전히보다 큰의 이 11이기 때문에 10. 525 00:33:05,590 --> 00:33:06,920 나는 마이너스 마이너스. 526 00:33:06,920 --> 00:33:08,250 다시 한 번 나는 인쇄 할 수 있습니다. 527 00:33:08,250 --> 00:33:10,950 예상대로 10입니다. 528 00:33:10,950 --> 00:33:12,510 >> 그래서 지금, 다음. 529 00:33:12,510 --> 00:33:16,250 그것은 다시 조건거야, 난입니다 10보다 큰,하지만 난 그래서 지금 10 530 00:33:16,250 --> 00:33:20,040 그것은 10 이상하지, 그래서 우리는 기대 그 동안 루프 밖으로 떨어질 수 있습니다. 531 00:33:20,040 --> 00:33:22,220 그리고 지금 우리는 코드 줄 아래입니다. 532 00:33:22,220 --> 00:33:28,750 그리고 다른 명령, 목록, 그냥 것입니다 이전 및 다음을 표시합니다 533 00:33:28,750 --> 00:33:31,240 코드 라인에서 몇 경우 당신은 자신을 잃었다. 534 00:33:31,240 --> 00:33:35,420 그래서 우리는 단지이 while 루프를 종료 지금 우리는이를 입력 535 00:33:35,420 --> 00:33:37,080 while 루프, 라인 (18). 536 00:33:37,080 --> 00:33:39,860 내가 0 같지 않은 동안 그래서. 537 00:33:39,860 --> 00:33:46,570 그리고, 다음에, 나는 우리가 거​​ 나 마이너스 3에 해당하고, 알이 그냥 계속됩니다. 538 00:33:46,570 --> 00:33:48,270 그리고 우리는 내가를 인쇄 할 수 있습니다. 539 00:33:48,270 --> 00:33:49,990 >> 각 명령은 종류의 바로 가기가 있습니다. 540 00:33:49,990 --> 00:33:51,720 그래서 P는 인쇄에 대한 짧습니다. 541 00:33:51,720 --> 00:33:53,400 그래서 우리는 피 나는 할 수있다. 542 00:33:53,400 --> 00:33:57,550 그냥 N을 들고 계속 또는 다음 일을 계속. 543 00:33:57,550 --> 00:33:58,340 다시 난을 인쇄합니다. 544 00:33:58,340 --> 00:34:00,380 당신은 167 음의 지금을 참조하십시오. 545 00:34:00,380 --> 00:34:06,030 그래서이 영원히 계속,하지만하지 않습니다 정말 영원히, 당신이 방금 본 때문에, 546 00:34:06,030 --> 00:34:09,330 실제로 어떤 시점에 종료됩니다. 547 00:34:09,330 --> 00:34:15,699 >> 그래서 GDB를 시작하고있다. 548 00:34:15,699 --> 00:34:19,504 그러나 이제 GDB에 한 가지 더 해 보자. 549 00:34:19,504 --> 00:34:20,754 어, 디버그. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 그래서, 특히이 경우, 무한 루프는 내부​​에 일어난 552 00:34:28,534 --> 00:34:30,050 주요 기능. 553 00:34:30,050 --> 00:34:35,779 그리고 지금은, 단지 난 그 받아 들일 에 무한 루프를 이동하는 것 554 00:34:35,779 --> 00:34:37,029 푸 기능. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 단지 이것의 끝에, 그 기억 이 프로그램은, 음, 이것은 원래이었다 557 00:34:43,730 --> 00:34:46,210 다만했다 foo는 호출 나는 인쇄 할 것. 558 00:34:46,210 --> 00:34:51,880 하지만 지금 우리는이다, foo는 전화하는거야 그것은 0의 때까지를 감소하고, 예정 559 00:34:51,880 --> 00:34:54,548 그 변수를 인쇄 할 수 있습니다. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 그 저장합니다. 562 00:34:57,970 --> 00:35:00,175 디버그를 확인합니다. 563 00:35:00,175 --> 00:35:03,310 그리고 지금, GDB 디버그. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> 난 그냥 실행하면 그럼 난 아니 겠지 실제로 단계별 할 수 내 566 00:35:10,580 --> 00:35:11,730 프로그램 라인별로 라인. 567 00:35:11,730 --> 00:35:19,820 그래서 메인에서 휴식하자, 다음 실행을 입력합니다. 568 00:35:19,820 --> 00:35:28,160 그래서이 통과, printf와, 입력 정수, 정수, 13를 얻을. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 그래서 우리는 감분을 유지하는 것입니다 나는 10보다 큰 때까지. 571 00:35:37,490 --> 00:35:42,840 그럼 우리가 넘어 가지거야 while 루프, 라인에 도착 - 572 00:35:42,840 --> 00:35:44,364 의 별도의 창에서 열 수 있습니다. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 나는 더 이상이 될 때까지 우리가 감소하지 다음 10보다 큰, 그리고 우리 575 00:35:53,300 --> 00:35:55,700 foo는, 함수를 호출. 576 00:35:55,700 --> 00:36:01,340 >> 그렇다면 최대한 빨리 충돌로 일어난 함수 foo는, 음, 내가 foo는 호출하고, 577 00:36:01,340 --> 00:36:04,030 나는 더 이상 GDB를 제어 할 수 없었다. 578 00:36:04,030 --> 00:36:10,230 그래서 최대한 빨리이 줄에서 다음을 쳐서, 이런 일이 될 때까지 일을 계속, 579 00:36:10,230 --> 00:36:12,400 언제 어디서 프로그램 종료 - 580 00:36:12,400 --> 00:36:14,450 그것은 결국 존재하지 않는 가정합니다. 581 00:36:14,450 --> 00:36:16,390 당신은 비록 조금을 위해 일시​​ 정지 보았다. 582 00:36:16,390 --> 00:36:22,040 그래서 내가 왜 통제를 잃게 않았다 그 시점에서 프로그램? 583 00:36:22,040 --> 00:36:27,540 나는 다음에 입력 할 때 음,, 그 간다 코드의 문자 다음 줄이 584 00:36:27,540 --> 00:36:28,850 실행됩니다. 585 00:36:28,850 --> 00:36:35,950 그래서 후 라인 (21), 다음 코드 줄 즉, 라인 (22)입니다 실행됩니다 586 00:36:35,950 --> 00:36:38,520 메인에서 종료,이다. 587 00:36:38,520 --> 00:36:43,810 그래서 난 그냥 가고 싶지 않아 코드의 다음 라인에. 588 00:36:43,810 --> 00:36:48,170 나는 기능, foo는에 가고 싶어, 다음 또한 단계별로 589 00:36:48,170 --> 00:36:49,830 코드의 그 라인. 590 00:36:49,830 --> 00:36:53,726 >> 그래서, 우리는 대안이있다. 591 00:36:53,726 --> 00:36:56,770 이제 다시는 그만하자. 592 00:36:56,770 --> 00:36:58,020 주요 휴식. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 어, 1, 다음, 다음, 13, 다음, 다음, 다음, 조심스럽게, 595 00:37:06,370 --> 00:37:09,820 우리는 라인 foo에 떨어지기 전에. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> 그래서 지금, 우리는 라인 (21)에있어 우리는 foo는 전화 위치. 598 00:37:13,700 --> 00:37:17,100 우리는 다음에 입력하지 않는 이후 단지 함수 foo를 호출합니다 599 00:37:17,100 --> 00:37:18,710 코드의 다음 라인으로 이동합니다. 600 00:37:18,710 --> 00:37:20,840 우리가 사용하고자하는 단계입니다. 601 00:37:20,840 --> 00:37:25,690 그래서 단계의 차이가있다 단계가 한 단계 씩 다음, 602 00:37:25,690 --> 00:37:28,190 기능 및 다음 간다 기능 이상. 603 00:37:28,190 --> 00:37:32,830 그것은 단지 전체를 실행 기능과 유지하려고. 604 00:37:32,830 --> 00:37:37,210 >> 그래서 단계는 우리를 데리고 것입니다 함수로, foo는. 605 00:37:37,210 --> 00:37:41,160 그리고 우리는 지금 우리가 돌​​아 왔 여기를 참조 이론적으로,의이 while 루프, 606 00:37:41,160 --> 00:37:44,190 영원히 계속하는 것. 607 00:37:44,190 --> 00:37:50,420 그리고 당신은 그것도 아닌 단계를 치면 호출하는 함수는, 다음의 정보가 608 00:37:50,420 --> 00:37:51,720 다음과 동일합니다. 609 00:37:51,720 --> 00:37:55,320 당신이 선에있을 때 그래서 그것은 단지의 그 단계 함수를 호출 610 00:37:55,320 --> 00:37:56,970 다음과 다를 것입니다. 611 00:37:56,970 --> 00:37:57,930 그래서 단계는 여기에서 우리를 가져올 것이다. 612 00:37:57,930 --> 00:38:02,100 단계, 단계, 단계, 단계, 단계, 단계, 및 우리는 영원히 그냥 무한 루프됩니다. 613 00:38:02,100 --> 00:38:06,810 >> 그래서 당신은 그것에 익숙해 질 수도있는 무한 루프를 식별하는 방법이며, 614 00:38:06,810 --> 00:38:08,960 그냥이 입력 키를 잡고 문제가 발생할 위치를 참조하십시오. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 거기에 그렇게 할 수 더 나은 방법이 있지만, 지금은, 그 완벽하게 충분하다. 617 00:38:14,780 --> 00:38:17,967 그리고 문체, 스타일에 부합하는 50, 나는이 일을해야합니다. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 OK. 620 00:38:24,030 --> 00:38:28,400 >> 그래서 마지막으로 명령을 소개합니다. 621 00:38:28,400 --> 00:38:30,810 자, 안으로 디버깅 gdb를하자 622 00:38:30,810 --> 00:38:35,580 그래서 그 대신 주에 깨고, 만약 I 푸 기능을 알고도 623 00:38:35,580 --> 00:38:39,230 문제, 그럼 내가있을 수 있었다 단지 대신, foo는에서 휴식했다. 624 00:38:39,230 --> 00:38:42,310 이 전에서 휴식 봅시다 주 및 foo는 모두. 625 00:38:42,310 --> 00:38:45,390 그래서 당신은 많은 중단 점을 설정할 수 있습니다 당신이 원하는대로. 626 00:38:45,390 --> 00:38:49,230 내가 run을 입력하면 돼 에 중지 - 627 00:38:49,230 --> 00:38:52,180 우, 이후의 재 컴파일하자 나는 물건을 변경했습니다. 628 00:38:52,180 --> 00:38:55,950 이 라인, 경고, 소스를 볼 수 있습니다 파일이 실행 파일보다 더 최근이다. 629 00:38:55,950 --> 00:38:59,680 그래서 난 그냥 여기에 갔다 의미 과 스타일을 준수하기 위해 이러한 변경 630 00:38:59,680 --> 00:39:03,100 50,하지만 난 다시 컴파일하지 않았다 프로그램. 631 00:39:03,100 --> 00:39:04,870 그래서 GDB는 그 날을 알고 있습니다. 632 00:39:04,870 --> 00:39:10,130 나는 다시 디버깅을, 종료합니다 GDB 디버그를 기록했다. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> 그래서 이제, 내가 무엇을하고 있었는지에. 635 00:39:12,800 --> 00:39:15,720 주, 휴식 foo는 휴식. 636 00:39:15,720 --> 00:39:20,680 지금은 프로그램을 실행, 그래서 만약 돌 때까지 계속 진행 637 00:39:20,680 --> 00:39:21,320 중단. 638 00:39:21,320 --> 00:39:24,680 즉, 중단 점에 발생 주에서 첫 번째합니다. 639 00:39:24,680 --> 00:39:28,630 자, 대신에 다음 일을, 다음, 다음, 다음에, 다음에, 나는 푸에 충돌 할 때까지, I 640 00:39:28,630 --> 00:39:35,230 계속되는, 계속 입력 할 수 있습니다 당신은 다음 중단 점에 도달 할 때까지. 641 00:39:35,230 --> 00:39:37,200 먼저 정수를 입력해야합니다. 642 00:39:37,200 --> 00:39:40,570 나는 칠 때까지 계속 계속 입니다 다음 중단 점, 643 00:39:40,570 --> 00:39:43,320 foo는의 기능. 644 00:39:43,320 --> 00:39:50,130 >> 당신이 충돌 할 때까지 그래서 실행이 실행됩니다 때 브레이크 포인트, 그러나 당신은 run을 입력 645 00:39:50,130 --> 00:39:54,060 당신은, 다음 프로그램을 시작하고있어 그 때 이후로, 계속합니다. 646 00:39:54,060 --> 00:40:01,950 난 그냥 메인 중단 한 경우 및 다음 실행, 그것은에서 깰 수있을 647 00:40:01,950 --> 00:40:03,670 다음 주, 그리고 계속합니다. 648 00:40:03,670 --> 00:40:10,050 내가 foo는에서 브레이크 포인트를 가지고 있지 않기 때문에 정수를 입력 한 다음 지금 난 649 00:40:10,050 --> 00:40:11,380 foo는에서 중단하지 않을. 650 00:40:11,380 --> 00:40:16,318 그냥 무한한 것 그 때까지 루프. 651 00:40:16,318 --> 00:40:17,568 OK. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> 그래서 GDB에 소개합니다. 654 00:40:24,420 --> 00:40:27,790 당신은 그것을 사용하기 시작한다 문제 세트에서. 655 00:40:27,790 --> 00:40:30,550 그것은 매우 도움이 될 수 있습니다 버그를 식별합니다. 656 00:40:30,550 --> 00:40:35,280 실제로 단지, 라인별로, 가면 코드를 통해, 그리고 무엇 비교 657 00:40:35,280 --> 00:40:39,740 실제로 당신이 무엇을 기대 일어나고 일이, 그것은 사랑의 658 00:40:39,740 --> 00:40:41,060 당신의 버그를 놓칠 어렵다. 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 OK. 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> 그래서 지난 주 다윗은 이것을 가져 에 대한 비밀 키 암호 물건 663 00:40:54,040 --> 00:40:59,350 우리가하지 않으려는 처음으로, 암호는 단지에 저장 될 우리의 664 00:40:59,350 --> 00:41:03,210 일부 일반 텍스트 파일에있는 컴퓨터, 여기서 누군가에 바로 올 수 있습니다 665 00:41:03,210 --> 00:41:04,660 그것을 열고 그들을 읽어보십시오. 666 00:41:04,660 --> 00:41:07,530 이상적으로, 그들은 암호화 될 것 어떤 방법으로. 667 00:41:07,530 --> 00:41:13,340 그리고 문제 세트 2, 당신은 처리 할 수​​ 있습니다 암호화의 한 방법으로, 668 00:41:13,340 --> 00:41:16,520 또는, 잘, 두 가지 방법이 있지만, 그들은 그렇게 큰되지 않습니다. 669 00:41:16,520 --> 00:41:20,050 당신이 해커 버전을 할 경우, 당신이있어 또한 처리 될 것 670 00:41:20,050 --> 00:41:22,150 몇 가지 암호를 해독. 671 00:41:22,150 --> 00:41:29,770 >> 그래서 문제는 지금 잘하더라도입니다 우리는 강력한 암호화가 672 00:41:29,770 --> 00:41:34,830 세계의 알고리즘은, 경우에 당신은 선택 특히 가난한 암호, 다음 673 00:41:34,830 --> 00:41:37,720 , 대단히 도움이되지 않습니다 이후 사람들 아직도 그것을 알아낼 수있을 것입니다. 674 00:41:37,720 --> 00:41:41,530 암호화 된 문자열을 보는 경우에도 해당 그것은 쓰레기 엉망처럼 보이는 675 00:41:41,530 --> 00:41:44,760 경우 즉, 그들에게 아무 의미들이 아직 몇 가지 암호를 시도해야 676 00:41:44,760 --> 00:41:50,560 당신이 다음, 그것을 알아낼 매우 안전하지 않습니다. 677 00:41:50,560 --> 00:41:55,890 그래서 동영상을보고 그 그 점을 만든다. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [동영상 재생] 680 00:42:00,970 --> 00:42:02,100 >> - 헬멧, 당신은 악마. 681 00:42:02,100 --> 00:42:03,370 무슨 일이야? 682 00:42:03,370 --> 00:42:05,170 내 딸에게 무슨 짓이야? 683 00:42:05,170 --> 00:42:09,910 >> 화려한을 소개하는 날을 허용합니다 젊은 성형 외과 의사, 박사 필립 684 00:42:09,910 --> 00:42:13,730 Schlotkin, 큰 코 전체에서 작업 남자 685 00:42:13,730 --> 00:42:16,080 우주, 그리고 비벌리 힐스. 686 00:42:16,080 --> 00:42:17,210 >> - 당신의 전. 687 00:42:17,210 --> 00:42:18,070 >> - 코를? 688 00:42:18,070 --> 00:42:18,670 이해가 안되는 데요. 689 00:42:18,670 --> 00:42:20,090 그녀는 이미 코를 받았어요. 690 00:42:20,090 --> 00:42:21,910 그것은 달콤한 열 여섯 존재했다. 691 00:42:21,910 --> 00:42:22,140 >> - 아니. 692 00:42:22,140 --> 00:42:23,690 그것은 당신이 생각하는 그런게 아니야. 693 00:42:23,690 --> 00:42:25,420 그것은 훨씬, 훨씬 더 나쁜. 694 00:42:25,420 --> 00:42:30,300 당신은 나에게 조합을 제공하지 않는 경우 공기 방패, 박사 Schlotkin 것 695 00:42:30,300 --> 00:42:34,226 그녀의 이전의 코를 당신의 딸을 제공합니다. 696 00:42:34,226 --> 00:42:35,476 >> - 아니. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 어디서 났어? 699 00:42:40,516 --> 00:42:41,440 >> - 좋아. 700 00:42:41,440 --> 00:42:42,180 내가 말해주지. 701 00:42:42,180 --> 00:42:43,381 내가 말해주지. 702 00:42:43,381 --> 00:42:44,263 아니, 아빠. 703 00:42:44,263 --> 00:42:45,590 아니, 당신은 수 없습니다. 704 00:42:45,590 --> 00:42:46,860 >> - 당신이 바로, 내 사랑. 705 00:42:46,860 --> 00:42:48,450 나는 당신의 새로운 코를 놓칠 수 있습니다. 706 00:42:48,450 --> 00:42:52,090 그러나 나는 그에게 조합을 말하지 않을 것이다, 상관없이. 707 00:42:52,090 --> 00:42:53,680 >> - 아주 좋아요. 708 00:42:53,680 --> 00:42:55,685 박사 Schlotkin은 최악의 해. 709 00:42:55,685 --> 00:42:56,914 >> - 내 즐거움. 710 00:42:56,914 --> 00:43:00,690 >> [TOOLS은 날카롭게 되 고] 711 00:43:00,690 --> 00:43:01,910 >> - 아니. 712 00:43:01,910 --> 00:43:02,520 기다립니다. 713 00:43:02,520 --> 00:43:03,836 기다립니다. 714 00:43:03,836 --> 00:43:05,300 내가 말해주지. 715 00:43:05,300 --> 00:43:06,880 내가 말해주지. 716 00:43:06,880 --> 00:43:09,130 >> - 나는 일 것이다라는 것을 알고 있었다. 717 00:43:09,130 --> 00:43:09,900 괜찮아요. 718 00:43:09,900 --> 00:43:12,850 이리 줘. 719 00:43:12,850 --> 00:43:16,918 >> - 조합은 하나입니다. 720 00:43:16,918 --> 00:43:17,406 >> - 한. 721 00:43:17,406 --> 00:43:18,382 >> - 한. 722 00:43:18,382 --> 00:43:19,358 >> - 두. 723 00:43:19,358 --> 00:43:19,846 >> - 두. 724 00:43:19,846 --> 00:43:20,822 >> - 두. 725 00:43:20,822 --> 00:43:21,310 >> - 세. 726 00:43:21,310 --> 00:43:21,798 >> - 세. 727 00:43:21,798 --> 00:43:22,774 >> - 세. 728 00:43:22,774 --> 00:43:23,262 >> - 네. 729 00:43:23,262 --> 00:43:23,750 >> - 네. 730 00:43:23,750 --> 00:43:26,150 >> - 네. 731 00:43:26,150 --> 00:43:27,010 >> - 다섯. 732 00:43:27,010 --> 00:43:27,670 >> - 다섯. 733 00:43:27,670 --> 00:43:29,010 >> - 다섯. 734 00:43:29,010 --> 00:43:34,770 >> - 따라서 조합 하나이다 둘, 셋, 넷, 다섯. 735 00:43:34,770 --> 00:43:37,460 즉, 멍청한 조합의 나는 내 인생에서 들었다. 736 00:43:37,460 --> 00:43:39,710 즉, 물건의 종류의 바보 자신의 수하물에있을 것입니다. 737 00:43:39,710 --> 00:43:42,000 >> 당신의 전, 당신을 감사합니다. 738 00:43:42,000 --> 00:43:43,530 >> - 무슨 짓을 한거야? 739 00:43:43,530 --> 00:43:44,490 >> -I 벽을 해제. 740 00:43:44,490 --> 00:43:45,420 >> - 아니, 당신은하지 않았다. 741 00:43:45,420 --> 00:43:45,840 당신은 영화 전체를 해제. 742 00:43:45,840 --> 00:43:46,930 >> -I은 잘못된 버튼을 누르면해야합니다. 743 00:43:46,930 --> 00:43:48,265 >> - 그럼, 다시 넣어. 744 00:43:48,265 --> 00:43:49,110 뒷면에 동영상을 넣어. 745 00:43:49,110 --> 00:43:49,510 >> - 네, 알겠습니다. 746 00:43:49,510 --> 00:43:49,917 네, 알겠습니다. 747 00:43:49,917 --> 00:43:50,324 >> 의는, 아놀드 - 가자. 748 00:43:50,324 --> 00:43:51,140 그레첸을 가자. 749 00:43:51,140 --> 00:43:53,060 물론, 당신은 아직도 거에요 이것에 대한 대금을 청구해야합니다. 750 00:43:53,060 --> 00:43:53,440 >> [END 동영상 재생] 751 00:43:53,440 --> 00:43:54,690 >> ROB BODEN : 좋습니다. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 우리는 이미에 대해 얘기하고 그래서 지금 어떤 방법으로 보안, 좋은 754 00:44:08,430 --> 00:44:16,050 작은 영화 포스터, 그래서 최근에 NSA와 일,이 문제 755 00:44:16,050 --> 00:44:17,300 모든 것을 감시. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 그것은 당신 같은 느낌이 어려울 수 있습니다 프라이버시의 일종이 758 00:44:26,930 --> 00:44:34,540 온라인 세계, 내가 말할 수 있지만 당신 PRISM의 대부분의 세부. 759 00:44:34,540 --> 00:44:42,130 그래서 PRISM을 넘어, 우리는하지 않을거야 지금 그것에 대해 이야기 할 760 00:44:42,130 --> 00:44:44,030 노트북에 대해 생각합니다. 761 00:44:44,030 --> 00:44:48,360 그래서 여기까지 나는 전환 할 내 실제 계정에, 762 00:44:48,360 --> 00:44:50,370 내 작은 펭귄. 763 00:44:50,370 --> 00:44:57,310 그래서 암호를 가지고 있고, 그 암호는 내가이 원하는 무엇이든합니다. 764 00:44:57,310 --> 00:45:02,430 >> 하지만 기억이 내가 로그인 해요 그래서이 로그인로 765 00:45:02,430 --> 00:45:04,850 프롬프트에서 어떤 프로그램입니다. 766 00:45:04,850 --> 00:45:07,910 그것은이었다 일부 프로그램의 어떤 사람에 의해 쓰여진. 767 00:45:07,910 --> 00:45:13,250 그리고 그 사람은, 경우에 그들이있다 특히 악의적 인, 그들은 할 수 768 00:45:13,250 --> 00:45:17,780 말했듯이, 좋아, 그렇다면 암호 I 입력과 동일하다 내 769 00:45:17,780 --> 00:45:22,800 실제 암호, 또는 동등의 정보 특별한 암호 - 770 00:45:22,800 --> 00:45:25,550 다윗은 최고 또는 뭔가 - 771 00:45:25,550 --> 00:45:27,190 다음을 들여 보내 772 00:45:27,190 --> 00:45:33,760 따라서 악의적 인 프로그래머가있을 수 있습니다 당신의 맥의 모든, 또는에 대한 액세스 773 00:45:33,760 --> 00:45:36,150 윈도우, 또는 아무것도. 774 00:45:36,150 --> 00:45:41,980 >> 그래서, 이후, 관심 많이하지 않습니다 내 말은,이 로그인 프로그램입니다 775 00:45:41,980 --> 00:45:48,720 즉 OS X, 수백 발송하는 또는 수천명의 사람들이 776 00:45:48,720 --> 00:45:50,020 이 코드 리뷰. 777 00:45:50,020 --> 00:45:55,330 그래서, 당신은 어딘가에 코드에서, 만약 이 문자열은 등호 같으면 말 778 00:45:55,330 --> 00:45:58,860 다윗이 굉장하다, 로그인, 다음 사람의 될 것 같은, 기다립니다. 779 00:45:58,860 --> 00:45:59,800 이것은 옳지 않다. 780 00:45:59,800 --> 00:46:01,790 이 여기에있을 수 없습니다. 781 00:46:01,790 --> 00:46:06,650 그래서 우리가 일을 얻는 하나의 방법 종류의 보안합니다. 782 00:46:06,650 --> 00:46:10,300 >> 그러나 심지어 프로그램에 대한 생각 당신이 쓰고있다. 783 00:46:10,300 --> 00:46:13,000 의 당신이 로그인 프로그램을 작성한다고 가정 해 봅시다. 784 00:46:13,000 --> 00:46:20,440 당신이 쓴 그래서이 로그인 프로그램, 그래서 분명히, 당신은 좋은 785 00:46:20,440 --> 00:46:21,210 프로그래머. 786 00:46:21,210 --> 00:46:25,610 당신은 어떤 악의를 넣어 않을거야 x는 등호 경우 다윗은 굉장하다 787 00:46:25,610 --> 00:46:27,860 코드에. 788 00:46:27,860 --> 00:46:31,930 그러나이 프로그램을, 당신은 무엇을 할 이 프로그램을 컴파일하는 데 사용? 789 00:46:31,930 --> 00:46:34,180 연타 같은 것. 790 00:46:34,180 --> 00:46:38,460 그래서 만약에 일어난 사람 연타 맡았다 연타 특별 쓰기 791 00:46:38,460 --> 00:46:44,310 뭔가처럼 나는 컴파일하고있는 경우 프로그램에 로그인 한 후이 코드를 입력 792 00:46:44,310 --> 00:46:49,720 경우에, 말한다 로그인 프로그램에 X 같다 다윗이 굉장 같다? 793 00:46:49,720 --> 00:46:59,890 그래서 꽤 아직,하지만 우리는 같은가 여기서 문제가 어디에 연타, 잘, 794 00:46:59,890 --> 00:47:03,790 수천, 그렇지 않으면 수만의 사람들이, 연타 살펴 보았다 795 00:47:03,790 --> 00:47:07,160 코드의 라인을 쳐다 보면서 말했​​다, 좋아, 나쁜 아무것도 없습니다. 796 00:47:07,160 --> 00:47:10,680 물론, 아무도 일을하지 않습니다 이 악성 아무것도. 797 00:47:10,680 --> 00:47:15,780 >> 그러나이 같은 자신을 연타한다 내가 연타를 컴파일하는 경우? 798 00:47:15,780 --> 00:47:20,900 내가 몇 가지 컴파일러가있는 경우에 그 연타에 삽입 연타를 컴파일 799 00:47:20,900 --> 00:47:25,610 라고이 특별한 해킹, 모든 권리, 나는 연타를 컴파일 할 때, 다음 800 00:47:25,610 --> 00:47:31,290 실행 나는 특별히 찾아야한다받을 로그인 프로그램과 삽입의 내부 801 00:47:31,290 --> 00:47:34,230 이 암호는, 같음과 동일 데이브는 굉장하다? 802 00:47:34,230 --> 00:47:37,990 그래서 기억이 컴파일러 자체 어떤 점에서 컴파일해야합니다. 803 00:47:37,990 --> 00:47:42,810 그래서 당신은 연타를 컴파일 무엇을 선택하는 경우 그 자체는 다음, 악의적으로 804 00:47:42,810 --> 00:47:45,580 전체를 조여 질 수 길 아래 라인. 805 00:47:45,580 --> 00:47:49,630 >> 그래서 여기, 우리는 켄 톰슨 (Ken Thompson)이 데니스 리치. 806 00:47:49,630 --> 00:47:53,780 그래서 이것은 상징적 인 사진입니다. 807 00:47:53,780 --> 00:47:55,470 데니스 리치는 오른쪽에 있습니다. 808 00:47:55,470 --> 00:47:58,740 그는 전공 - 809 00:47:58,740 --> 00:48:03,640 거의 다 썼다 그래서 당신은 할 수 있습니다 이 클래스를 위해 그를 감사합니다. 810 00:48:03,640 --> 00:48:04,840 켄 톰슨은 왼쪽에 있습니다. 811 00:48:04,840 --> 00:48:07,780 그 중 두 개는 기본적으로 UNIX를 썼다. 812 00:48:07,780 --> 00:48:10,140 글쎄, 그들은 주요 참여자했다 UNIX에서. 813 00:48:10,140 --> 00:48:11,310 어떤 사람이 있었다. 814 00:48:11,310 --> 00:48:16,240 그런 점에서 보면 켄 톰슨,, 그는 튜링 상을 수상. 815 00:48:16,240 --> 00:48:20,860 그리고 튜링 상을, 난 항상 들었어요 그것은이 방법을 참조, 그것의 정보 816 00:48:20,860 --> 00:48:23,100 컴퓨터 과학의 노벨상. 817 00:48:23,100 --> 00:48:27,500 >> 그래서 튜링 상에, 그는에있다 그의 수락 연설을 제공합니다. 818 00:48:27,500 --> 00:48:31,790 그리고 그는이 아주 유명한 연설에게 제공 지금, 신뢰하는에 반영이라고 819 00:48:31,790 --> 00:48:35,620 우리는 연결 한 신뢰, 물론 웹 사이트에서 할 수 있습니다. 820 00:48:35,620 --> 00:48:41,670 이 연설에서, 그는 모든 권리 말한다 그래서 UNIX를 쓰고, 지금은 모든 821 00:48:41,670 --> 00:48:43,320 당신의 사람들은 UNIX를 사용하고 있습니다. 822 00:48:43,320 --> 00:48:46,960 이제 리눅스는 오늘 기억 UNIX의 직계 후손. 823 00:48:46,960 --> 00:48:50,140 OS X는 직접 UNIX를 사용합니다. 824 00:48:50,140 --> 00:48:53,810 윈도우는 너무 많이하지 않지만, 많은 아이디어 UNIX에서 촬영했다. 825 00:48:53,810 --> 00:48:59,220 >> 그래서 그는, 무대에 올라 말한다 좋아요, UNIX를 썼다. 826 00:48:59,220 --> 00:49:03,940 그리고 너무 너희들도 알다시피, 난 모든에 로그인 할 수 827 00:49:03,940 --> 00:49:05,590 컴퓨터의 하나 하나. 828 00:49:05,590 --> 00:49:14,280 X 만약 내가 이러한 특수 중 하나를 넣어 때문에 동일은 켄 톰슨이 굉장 동일 829 00:49:14,280 --> 00:49:16,350 그때는 로그인 할 수 있어요. 830 00:49:16,350 --> 00:49:18,370 그래서 사람들은, 잘처럼 어떻게 한거야? 831 00:49:18,370 --> 00:49:21,090 우리는 로그인 프로그램 보았다 아무 것도 없습니다. 832 00:49:21,090 --> 00:49:24,700 그는 음, 컴파일러에게 수정처럼 로그인 프로그램에 로그인 할 수 833 00:49:24,700 --> 00:49:30,490 로그인 프로그램은 이제이되도록 그 X는 켄 톰슨 등호 834 00:49:30,490 --> 00:49:31,700 굉장합니다. 835 00:49:31,700 --> 00:49:33,120 >> 그리고 그들은 음, 사실이 아니다,라고. 836 00:49:33,120 --> 00:49:35,740 우리는 컴파일러를보고하고있어 컴파일러는 모든 라인이없는 837 00:49:35,740 --> 00:49:36,400 그런 코드입니다. 838 00:49:36,400 --> 00:49:40,540 그는 OK, 같은,하지만 당신은 무엇입니까 컴파일러로 컴파일? 839 00:49:40,540 --> 00:49:44,810 그리고, 물론, 같은, 그들이 생각하기에, 그는의 나는 당신에게 컴파일러를 준 사람이야 840 00:49:44,810 --> 00:49:50,580 당신은 컴파일러를 컴파일하여, 그래서있어 당신은 컴파일러를 컴파일하는 841 00:49:50,580 --> 00:49:56,390 그 자체가 악성 및 것 로그인 프로그램을 중단. 842 00:49:56,390 --> 00:49:59,360 그러니까 기본적으로, 그 시점에서, 거기에 소스 볼 수있는 방법은 없습니다 843 00:49:59,360 --> 00:50:02,450 로그인 프로그램의 코드 잘못을 확인하려면 다음을 참조하십시오. 844 00:50:02,450 --> 00:50:04,220 당신은에서 볼 수 없습니다 컴파일러의 소스 코드 845 00:50:04,220 --> 00:50:06,790 잘못을 확인하려면 다음을 참조하십시오. 846 00:50:06,790 --> 00:50:11,940 >> 당신은 컴퓨터를보고해야 코드의 실제 이진 847 00:50:11,940 --> 00:50:16,760 이, 잠깐, 볼 컴파일 컴파일러 줄의 코드는 여기 안된다. 848 00:50:16,760 --> 00:50:22,130 그러나 켄 톰슨 (Ken Thompson)은 한 걸음을 내디뎠 더 잘,가 말했다 849 00:50:22,130 --> 00:50:25,980 이러한 특별 프로그램을 실제로 당신이 프로그램의 바이너리를 읽을 수 있도록, 850 00:50:25,980 --> 00:50:29,340 그래서 누군가가 해당 프로그램을 사용하는 경우 바이너리를 읽고, 그들은이 볼 수있을 것입니다 851 00:50:29,340 --> 00:50:30,490 코드 라인. 852 00:50:30,490 --> 00:50:34,020 그는 모든 말을 그 프로그램을 수정 바로, 당신이보고있는 경우 853 00:50:34,020 --> 00:50:38,460 컴파일러는이 특정를 표시하지 않습니다 이진 설정합니다. 854 00:50:38,460 --> 00:50:42,830 >> 그럼 당신은 수행해야하는 단계 더 기본적으로, 그것은있을 수 있습니다 855 00:50:42,830 --> 00:50:46,210 간접 찍은 여러 수준, 어떤 시점에서, 아무도 실제로 없다 856 00:50:46,210 --> 00:50:47,990 점검 할 것. 857 00:50:47,990 --> 00:50:52,590 그래서 이야기의 교훈은 당신이있어입니다 작성 될 수 없습니다 858 00:50:52,590 --> 00:50:54,340 이 클래스에 연타. 859 00:50:54,340 --> 00:50:57,020 당신은 등산을 사용하는 것입니다 이 클래스에 많은 연타. 860 00:50:57,020 --> 00:51:00,490 당신이 알다시피, 연타는 악성 모든 태업되는 프로그램 861 00:51:00,490 --> 00:51:03,520 하나의 프로그램은 당신은 컴파일했습니다. 862 00:51:03,520 --> 00:51:08,206 그리고 바로 그 불길에 당신을 떠날 수요일에 당신을보고,주의. 863 00:51:08,206 --> 00:51:10,030 >> [박수] 864 00:51:10,030 --> 00:51:12,935 >> 스피커 2 : 다음 CS50에서. 865 00:51:12,935 --> 00:51:14,580 >> 스피커 3 : 그런 말을 감히하지 마십시오. 866 00:51:14,580 --> 00:51:15,930 당신은이 작업을 수행 할 수 있습니다. 867 00:51:15,930 --> 00:51:19,440 이전에이 짓을했는지, 당신은이 작업을 수행 할 수 오늘, 내일이 작업을 수행 할 수 있습니다. 868 00:51:19,440 --> 00:51:20,930 당신은 년 동안이 일을하고 있었 으니까. 869 00:51:20,930 --> 00:51:22,790 그냥 거기 가서이 작업을 수행합니다. 870 00:51:22,790 --> 00:51:24,310 당신은이 작업을 수행 할 수 있습니다. 871 00:51:24,310 --> 00:51:26,102 >> [음악 연주]