[음악 연주] ROB BODEN : 좋습니다. 비디오의 첫 번째 그래서, 우선, 익숙한 얼굴에서. [동영상 재생] - 좋아. 이것은 CS50,이입니다 주일의 시작. 내가 당신과 함께있을 수 없습니다 죄송합니다 오늘, 그러나 저를 소개 할 수 있도록 CS50 자신의 롭 보덴. [END 동영상 재생] [박수와 환호] ROB BODEN :의 작품으로 그 비디오는 환상적이다. 괜찮아요. 그래서 일단, 다른 점심이있다. 그것은 1:15에서 내일입니다. 이번 주 금요일은 점심 식사에게 없습니다. 그것은 Quora에와있다. 그리고 토미는 하나의하지만, 여기 없습니다 전 머리의 CF가 사람들, 토미 맥 윌리엄. 그래서 그는 재미있는 사람이야. 당신은 와야한다. 괜찮아요. 그래서 지난 주, 우리는 떨어져 파괴 시작 캐릭터가 정말 무엇에 대해. 우리는 처음부터 알고 있었어 그 그것은 일련의 문자입니다. 그러나 지난 주, 우리는 사실에 파 놓은 광산 무엇이 정말 일련의입니다 문자는 물론, 우리는 지금이 문자의 배열. 그리고 우리는 문자열, 그것은 배열의 것을 알고 문자, 맨 끝에서, 우리는이 특별한 NULL 바이트가,이 백 슬래시 0, 즉 말을 나타냅니다 문자열. 그리고 문자열의 배열 자, 그러나 우리는 할 수 있습니다보다 더 단지 문자의 배열, 우리는 어떤의 배열을 가질 수있다 우리가 원하는 물건의 종류. 그래서, 당신은 지난 주 기억 해보면, 다윗이 도입 된 세 프로그램 정말 빠르게. 우리가 할거야 그래서 일단은 정수에 대한 사용자 요청 방에있는 사람 수. 우리는 그 정수가 있으면, 우리는 배열을 선언하고 있습니다. 이 부류의 구문을 확인합니다. 당신은 익숙해 질 것입니다. 그래서 우리는 정수의 배열을 선언하고 연령이라고하고, N 거기 이 배열의 정수. 여기 그래서이 패턴이 4 INT 나는 플러스, 내가 미만 n은 0과 동일 플러스, 그 또한 패턴이 될 것입니다 당신은 매우 익숙해있다. 그것은 거의 당신이있어 방법 때문에 항상 배열을 반복하는 것. 그래서 n은 기억 우리의 배열의 길이. 그리고 여기, 우리는 반복적으로 요구하고있다 방에있는 사람의 난의 나이에. 이 후, 우리가 내려 가서, 무엇을 위해 임의의 이유로, 우리는 다음 그들이려고 얼마나 오래된 인쇄 지금부터 해가 될 수 있습니다. 그리고 그 프로그램을 실행하면,하자 , 연령을 슬래시 세 점. 그래서 방에있는 사람 수, 의 세 가지가있다 가정 해 봅시다. 그리고, 첫 번째 사람은 13이다, 말 다음에 (26)이고, 최후로 30이다. 그래서 다음은이 세 가지를 반복합니다 사람들은 14 중 27, 31를 인쇄 할 수 있습니다. 그래서 기억이 우리를 선언 할 때 크기 n의 배열이있는 인덱스 배열, 배열 값을 가지고 있으며, 인덱스 0, 1, 2, 줄곧 최대 N 마이너스 1. 그래서 우리는 말할 때 세 사람이 있었다 방에, 우리는 여기에 넣어 본 내지 제 반복 루프, 난 0이 될 것입니다. 그래서 인덱스 0. 우리는 처음을 할당 사용자가 입력 한 나이. 그런 다음 하나에, 우리는 입력하고 제 2 n 사용자가 입력하고있는 두, 마지막 n 옆에. 그래서 알이 크기의 배열 세 아무것도하지 않습니다 인덱스 세에. 이 유효하지 않습니다. 괜찮아요. 그래서, 다시 여기에 가고. 그래서 지금 우리가 배열을 처리 한 것으로, 저희는 어느 정도 익숙해야합니다. 이제 우리는 명령에 움직일 수있을거야 가 될 수 있습니다 줄 인수 이 문제 세트에 꽤 관련. 그래서 지금까지, 할 때마다 당신은했습니다 메인 함수를 선언, 우리는했습니다 주요 int 무효 말했다. 그래서 공간은 의미 우리는 전달되지 않습니다 이 함수에 대한 인수. 이제 우리는 주를 만날 수있을 거예요 일부 인수를 취할 수 있습니다. 여기에서 우리는 ARGC INT를 호출 문자열 argv와 브래킷. 브래킷은, 다시 한 번, 표시 우리는 배열을 다루고있다. 그래서 여기, 문자열 argv와 브래킷, 우린 문자열 배열을 처리. 그래서 ARGC, 그 나타내는 것 우리는 얼마나 많은 인수 이 프로그램에 전달. 그리고, 그게 무슨 뜻인지 확인합니다 의이을 닫습니다 수 있습니다. OK. 그래서 지금까지 우리는 모든을 실행했습니다 점 슬래시 나이와 같은 프로그램입니다. 우리는 할 수 있습니다 또한, 명령 줄에서, 지난 인수를 전달, 따라서 용어, 명령 행 인수. 그래서 첫 번째 인수, 안녕하세요. 그래서 여기, ARGC 세 것입니다. 그것은 인수의 수의 명령 줄에서. ARGC 항상 적어도 하나이므로 닷 자체 나이를 슬래시의 하나로서 계산 명령 줄 인수. 그런 인사는 처음이다. 점 슬래시 나이는, 제로 번째의 경우 안녕하세요 최초, 세계는 두 번째 명령 줄 인수. 그래서 문자열 ARGV, 우리는 보게 될 것입니다, 문자열, 점 슬래시를 포함 세,여보세요, 세계. 그리고 다윗의 요청에 의해, 우리는거야 그 소개 동영상을 재생합니다. [동영상 재생] 업 위브 프로그램에서 지금까지 서면, 우리는 선언했습니다 메인 화면 주요 int 무효. 그리고이 모든 시간, 그 공간에는 단순히 지정되어 그 프로그램은 고려하지 않았 음 명령 줄 인수. 사용자가 실행하는 즉, 프로그램, 그 또는 그녀는 명령을 제공 할 수있다 추가를 작성하여 줄 인수 단어 나 구 후 프로그램의 프롬프트에 이름을 지정합니다. 글쎄, 당신은 당신의 프로그램을 원하는 당신이 경우에 명령 줄 인수 하나를 가지고 더 그런 말은, 우리는 교체해야 인수의 부부와 함께 무효화. 그럼 그렇게합시다. CS50.h. 포함 표준 io.h. 포함 주이자. 그리고 지금, 대신 무효, 나는에 갈거야 ARGC라는 중간, 및을 지정 ARGV라는 문자열 배열입니다. 이제, argc와 argv에 있습니다 단순히 규칙. 우리는이 인수를 호출 한 수 우리가 원하는 거의 모든 작업. 그러나 중요한 것은 ARGC는 것입니다 INT 정의함으로써,이 때문에 인수의 수를 포함하는 것, 총 워드 수 그 사용자는 자신의 프롬프트에 입력하고있다. ARGV 한편, 인수 벡터이며, 실제로 저장하는 배열 될 것 사용자가 가지고있는 모든 단어 자신의 프롬프트에 입력했습니다. 의 지금은 뭔가를 계속하자 이들 중 하나 이상과 함께 명령 줄 인수. 특히,의 전방 및 인쇄 가자 어떤 단어를 사용자가 입력 프로그램의 이름 뒤에 프롬프트에서. 오픈 브라켓. 대괄호. printf의 퍼센트의 백 슬래시와 쉼표. 그리고 지금은 printf의 어떤 값을 말할 필요 그 자리에 연결합니다. 나는 사용자가 가지고있는 첫 번째 단어를 원하는 프로그램의 이름을 입력 한 후, 그래서 내가 지정하는거야 ARGV 브래킷 1, 가까운 괄호, 세미콜론. 이제, 브라켓 1이 아닌 브래킷 0? 음, 자동 저장, 밝혀 ARGV에 0이 될 것입니다 프로그램의 실제 이름. 그래서 첫 번째 단어가 사용자 유형 프로그램의 이름으로, 후 대회가 될 것 ARGV 1에 저장됩니다. 의 지금 컴파일하자 이 프로그램을 실행을 클릭합니다. ARGV 0 점 슬래시 ARGV 0을 확인합니다. 그리고 지금은 단어 안녕하세요있다. 입력합니다. 그리고 거기에 우리는여보세요, 그것이있다. [END 동영상 재생] ROB BODEN : 좋습니다. 그를 닫습니다. 그래서 프로그램에 모습을 복용하는 우리는 그냥 잘, 우리에게 단지 소개 우리는 0 ARGV 인쇄하면 지금, 확인, 표시합니다 그것은, ARGV 0 점 슬래시 ARGV 0 것입니다. 예상대로 따라서, 그것은 밖으로 인쇄하는 것 ARGV 0이기 때문에, 프로그램의 이름 항상 될 것 프로그램의 이름입니다. 그러나의 뭔가를하자 더 흥미로운 비트. 그래서 문제 세트에, 당신은 할 수 있습니다 이 기능 atoi와 소개. 그래서 우리는 무엇을 위해 atoi와 사용합니까? 즉, 변환 것 정수 문자열입니다. 그래서 문자열을 전달하는 경우, 1 ~ 2 세, atoi와에, 그 변환 거 야 정수로, 1 ~ 2 세. 그래서 우리는 첫 번째로 변환하는거야 정수에 대한 명령 행 인수, 다음 그냥 정수를 인쇄 할 수 있습니다. 그러니까 기본적으로, 우리는 가지입니다 다만 getInt를 재 구현 정수는 명령에 입력 라인 대신 프로그램 대화. 그럼, ARGV 0을 만들고, 이제하자 여기에 그것을, 그 닫습니다. 그래서 argv에 0을 실행하고의 입력하자 정수, 1 개 2 개 3 개 4 개 1 ~ 2. 따라서, 하나의 정수를 인쇄 할 수 있습니다 2 개 3 개 4 개 1 ~ 2. 그 atoi와 몇 가지 미묘한 차이가 있습니다 그것은 아무것도에 대한 배려가 중단 유효 숫자 문자를 넘어, 하지만 그건 중요하지 않습니다. 그래서 당신은 무슨 생각하세요 나는이 작업을 수행 할 경우?에게 세그먼트 오류. 왜 그럴까요? 당신이 우리의 프로그램에서 다시 보면, 우린 ARGV 1, 첫 번째 인수로 변환 프로그램 이름 뒤에, 정수. 그러나 전달 된 인수가 없습니다 프로그램 이름 뒤에. 그래서 여기, 우리는이 버그가 있음을 확인 프로그램 이후, 우리는 그것을 실행하려고하면 인수하지 않고, 그냥 충돌합니다. 당신이 볼 수 그래서 다른 일반적인 패턴 뭔가 같은 ARGC이 적은 경우 가 없음을 나타내는 두 개의보다 적어도 프로그램 명과 첫 번째 인수, 우리는 뭔가를 할 수 있습니다 등의 printf 충분하지 명령 줄 인수. 그건 아마 인쇄 할 좋은 아니에요, 그것은처럼, 아마 뭔가 당신은 정수를 입력해야합니다 명령 줄에서. 난 그냥 거기에 종료됩니다. 그리고 1을 반환합니다. 따라서 우리의 말에 그 기억 프로그램, 우리는 0을 반환하는 경우, 그 종류의 성공을 나타냅니다. 그리고 주 자동 당신이 경우에 0을 반환합니다. 그래서 여기, 우리는 나타 내기 위해 1을 다시 튜닝하고 그 성공이 아니라고. 그리고 당신은 당신이 원하는 무엇이든 반환 할 수 있습니다, 다만, 0은 성공을 의미하고, 다른 건 실패를 나타냅니다. 그래서 사물의이 버전을 실행하자. 그래서 지금, 우리는 명령 줄을 입력하지 않으면 인수는 정확하게 말해주지 우리 충분히 명령 줄 수 없습니다. 문장을 완성하지 않았다. 그렇지 않으면, 우리는 실제로 한을 전달하는 경우, 그것은 프로그램을 완성 할 수있다. 그래서 이것은 당신이에 ARGC를 사용하는 방법입니다 의 개수를 확인하기 위하여 명령 줄 인수가 실제로 전달됩니다. 그럼 조금 더이 프로그램을 만들어 보자 복잡하고, 제 보면 일의 반복. 그래서 지금, 우리는 그냥 인쇄하지 않을 첫 번째 명령 행 인수. 여기, 우리는 int 전 등호에서 반복하고 0, 난 ARGC보다 플러스 플러스 및 인쇄 ARGV, 인덱스 나. 따라서,이 패턴은, 다시이 동일 대신에를 제외하고 이전과 패턴, 변수를 호출 N, 우리는 ARGC을 사용하고 있습니다. 그래서이 각 인덱스 반복된다 어레이에서, 각 인쇄보기 해당 배열에있는 요소입니다. 그래서, 우리는이 프로그램을 실행할 때, 잘, 어떤 명령 줄을 입력하지 않은 인수, 그냥 인쇄 그렇게 프로그램 이름. 나는 사물의 무리를 입력하면, 거 하나, 자신의 행에 각을 인쇄 할 수 있습니다. OK. 그래서 한 단계 더 나아가 보겠습니다. 대신 각 인수를 인쇄 자신의 라인에서의 각을 인쇄 할 수 각 인수의 문자 한 줄에. 그래서 ARGV가 있음을 유의 문자열의 배열입니다. 그래서 문자열이지만, 문자의 배열? 그래서 ARGV 정말 있음을 의미 문자 배열의 배열. 그래서 활용, 의 지금은이를 무시하자. 그냥 문자열 변수는 argv 0을 생각해 보자. 우리는 각 문자를 가지고 싶다면 ARGV 0의 줄에, 그럼 내가 원하는 우리가 사용하던 패턴을 수행하기 위해, 나는이다 어레이의 길이보다 작은, 여기의 나 strlen되는, 그건 내가하고 싶지 않은 어떤 문자열 의는 ARGV 0 같습니다. 그래서 나는 우리의 길이보다 작 이 경우 배열 배열, 자, 내가 플러스 플러스. 우리는 지난 주에 본대로 그리고, 그것은 이상적 우리는 외부 나 strlen 것을 이동하는 경우 조건으로, 이후 N이 추가됩니다 의의 나 strlen 우리가 갈 때마다 루프를 통해, 그리고의 변경 될 수 없습니다. 그래서 우리는 여기에 N과 동일하게 설정합니다. OK. 그래서 지금, 우리는 반복하는거야 배열의 각 인덱스. 그리고, 우리는 서로를 인쇄하려면 그 배열 %의 C의 문자입니다 우리가 사용하고자하는 플래그 문자. 그리고 지금 브래킷 내가 될 것입니다 문자열 인덱스 문자 I, 그렇다면 문자열 인사했다. 다음 부류는, 0 시간이 될 것입니다 토 1 등 전자, 그리고 것입니다. 그래서 지금 우리는 결합 할 이 두 가지. 우리는 각 문자를 인쇄 할 각 명령 줄 인수. 그래서 우리는해야 할 것입니다 루프 중첩. 종래, 제 1 카운터 나는, 다음은 일본이 될 것, N입니다 ARGV의 난의 나 strlen 될 것입니다, 나는 n보다 작은, 나 플러스 플러스입니다. 그리고 지금 대신 인쇄 ARGV의 난의, 그래서 내가 인덱스에가는 ARGV 브라켓 - 즉, i 번째 명령 행이 될 것 인수 ARGV는 I, J는 것입니다 j 번째 문자의 수 i 번째 인수. 지금 여기의 최대 제거합니다 우리는 루프에 넣어 때문이다. 그래서 문자열의 같음과 동일합니다 ARGV 난 다음의 브래킷 J. 음, 우리는 선언 할 필요가 없습니다 이 변수의. 대신, 우리는이를 결합합니다 우리가했던 일에 두 사람은, J를 나는 argv를. 스피커 1 : [청취]. ROB BODEN : 좋은 전화. 그래서이 고장입니다. 나는 실제로 그것을 실행하는 경우, 우리는 것 이를 실현했다. 내가 걱정 그래서 카운터 이 특히 루프는 J, 반복자입니다. 그래서 당신은 문제로 실행하는 것, 아마도 무한 루프, 만약에 우리 그 고정하지 않았다. 우리는 또한 이야기​​하고있는 이유 오늘에 대해 디버깅. OK. 그래서이 프로그램을 실행 할 수 있습니다. 그리고 이제 실제로 별도의 printf를 추가 할 수 바로 여기에 바로 인쇄 할 이것이 의미하기 때문에 다른 줄 때 우리 프로그램을 실행, 빈있을거야 각 문자의 사이에있는 라인 각 명령 행 인수. 음, 우리는 그게 무슨 뜻인지 볼 수 있습니다. OOP. 몇 가지 버그를 얻었다. 오류 암시 적으로 선언 라이브러리 함수 나 strlen. 그래서 우리의 프로그램에 다시 가고, I string.h에 포함 해시 잊어 버렸습니다. 그래서 string.h에이 될 것입니다 선언 헤더 파일 함수 나 strlen. OK, 그것은 컴파일합니다. 이제 그것을 실행하자. 그래서 그냥. 그것은 인쇄 할거야 우리의 프로그램 이름, 안녕하세요. 각 각 일을 인쇄 할 것 한 줄에 문자입니다. OK. 그럼 실제로 보자 한 단계. 대신 string.h에를 사용하는의에게하자 우리는 우리 자신을 구현하는 것입니다 방법에 대해 생각 나 strlen 기능. 그래서 나는 즉시 줄 것이다 함수 서명. 그럼 my_strlen에 전화를하자, 그리고의 인수로 문자열을 걸릴 것, 우리는 반환 할 것으로 예상 해당 문자열의 길이. 그래서 말인데, 그 사람이야? 예. OK. 그래서 이전 슬라이드에서 기억이 지난 주부터도했다 문자의 배열, 잘, 문자열, 그래서이 우리의 문자열의라고 할 수 있습니다. 그래서의 문자열 인 경우,여보세요, 다음, H-E-L-L-O, 메모리, 그 것 다음이 백 슬래시보기, 그리고 0 문자. 그래서 우리가 어떻게의 길이를받을 수 있나요? 음, 트릭이를 찾고 있습니다 0 문자,이 널 (null)을 백래쉬 터미네이터. 그래서 알고리즘 예정 거의 같은 것을 할 수 충분히 문자가 - 의이 손을 표현하자 카운터의이 INT 길이를 호출 할 수 있습니다. 그래서, 여기부터, 우린 우리의 문자열을 반복하는 것. 그래서, 그것은 H는 첫 번째 문자의, 그리고 다시, 그래서 0을 슬래시 아니에요 길이는 1입니다. 다음 문자로 반복, E,는 0을 백 슬래시 아니에요. 길이는 2입니다. L, 3. L, 4. O, 5. 그리고 마지막으로, 우리는 백 슬래시에 도달 0, 그래서 그 말, 잘, 이 문자열은 끝났어. 그럼 5를 반환 할 수 있습니다. 그래서 사실, 첫 번째, 그 구현 내 N 길이는 오른손, 0 같습니다. 그리고 우리는 반복하는 것입니다 - 스피커 1 : [청취] ROB BODEN : 아, 촬영. 좋은 전화. 붐. 그래서 N 길이는 0과 같습니다. 그래서 지금, 동안의 길이는하지 않습니다 다음 동일하고, 백 슬래시 0. 그래서,이 백 슬래시 0 기억, 그것은이다 실제 문자와 그 의미 문자열의 끝. 그냥 같은, 또한, 백 슬래시 n은 실제 문자입니다. 백 슬래시 0 표시하는 것입니다 우리의 문자열의 끝. 나는 거기에 걸 원하지 않아. 그리고 길이에 의해 색인의이되지 않는 동안 널 (NULL) 종료 자에 해당하고 우리는 단지 길이를 증가시키는 것입니다. 그럼, 우리의 프로그램의 끝에 길이는 결국 예정 이 경우 5합니다. 그리고 우리는 단지 길이를 반환합니다. OK. 그래서 지금 여기까지, 난 몰라 my_strlen 않습니다. 의가 있는지 확인하기 위해 컴파일하자 모든 원활하게 실행. 나는 2 일을 했습니까? 또는 1 있음을했다? 즉해야한다. 괜찮아요. 그래서이 변수는 argv 2입니다. 예상대로 작동하지만 하나는 내가 그것을에서했던 것이 었습니다? 예. OK. 일의이 버전은하지 않았다 printf의 새로운 후 라인 만 어떤 차이를 만들 수 없습니다. OK. 예상대로 그렇게했다. 이제 우리는 심지어이 한 단계를 결합 할 수 있습니다 또한, 여기에 위치를 통보, 잘, 첫째, 우리는 ARGV의 strlen 함수를 잡는거야 나는, 그리고 우리는 반복하는거야 해당 문자열의 각 문자. 그래서 그 대신 그 일을, 만약에 우리 단지 대기의이 논리를 결합 우리는 백 슬래시 0 권리를 칠 때까지 루프이에? ARGV의 I, J가 수행하는 동안 그래서 반복 동일하지 않은 백 슬래시 0. 그럼 먼저 실행하자. 괜찮아요. 그래서 여기,이 조건은 말하고있다 - 의 그 선택을 취소 할 수 있습니다. 그래서 지금이 우리의 ARGV하자. 그래서 난 그냥 전에 해당 프로그램을 실행했을 때, ARGV 문자열의 배열입니다. 그래서, 나는 점 슬래시 ARGV로 실행하는 경우 2, 안녕하세요, 다음 ARGV 자체 ARGV를 들어, 길이 3입니다 영,여보세요, 세계. 이러한 인덱스의 각각의 내부이고, 자신이있을거야 배열, 점은,이 슬래시 될 것입니다, 난 몰라 그 올바른 방향 인 경우, I 는 생각하지 않습니다. A-R-V 대시는 더 많은 공간이 필요합니다. 의이 배열로 잘라 보자. A-R-V 대시 0을 입력 한 다음 백 슬래시 0. 그리고 혼란에 인사 할 것이다. 의는, H-E의 백 슬래시 0을 가정 해 봅시다. 그리고 마지막으로, W-O 백 슬래시 0. 그래서 우리가 쓴 알고리즘, 그들이 왜 왔는지 루프에 대한 중첩 IS하고, 우리가 처음이 나는 다음 J 카운터. 이에 코드 쉬울 것 화면의 다시이에 가자. OK. 그래서 난의 반복자 것을 알 각 명령 반복 행 인수. j는 반복자 반복하는 것입니다 그의 각 문자에 명령 줄 인수. 그래서이 안쪽의 printf가 무엇을하고 있는지 우리는 ARGV 0, 0의 printf에게 printf를했다한다 ARGV 0 1의 printf ARGV 0 2 0 3 0 4 0 5, 0 6,하지만 지금은, ARGV 0 (7) 예정 같은 백 슬래시 0. 그래서 우리는 for 루프를 종료, 지금은 1로 반복. 그리고 지금 우리는 인쇄에가는거야 ARGV 1 0, ARGV 1 - 자, 이제, 내가 짧은 인사 잘라 있기 때문에, ARGV 1 2가 다시 될 것입니다 백 슬래시 0. 그래서, 나는 계속 증가하고, 그래서, 할 때까지 우리는 모든 인쇄 세계, 그리고 그 세 개의 명령 줄입니다 인수, 우리는 나갈거야 가장 바깥 쪽 루프와 우리의 프로그램을 완성하고 있습니다. OK. 그래서 여기에 다시 올 수 있습니다. 그래서 어느 정도 익숙 얻을 수 있습니다 여기에 명령 줄 인수 특정 문제를 설정합니다. 이제 디버깅. 그래서 당신은 아마 이미 수행해야했다 이전의 일부 디버깅 문제는 설정. 그리고 디버깅 중 하나 아주 쉬운 방법, 먼저, 버그가 프로그램을 살펴 보자. 음,,이 프로그램을 통해 산책 우리를 사용자에게 물어거야 정수, 그 정수를 잡아, 다음, 임의로, 우리는 while 루프를 가질 수 다만 감소하는 것입니다 그것은 10와 동일한의 I 때까지. 하자 그냥 내가 입력 해요 가정 10보다 큰 정수입니다. 그것은 10에 해당 될 때까지 그래서 나는 감소. 그리고 우리는 또 다른 while 루프가 내가 0 같지 않은 동안, 우린 것을 (3)에 의해 난을 감소시킬 것. 그래서 당신은 버그의 의도를 확인하는 경우 여기,이 내가에 감소 것이라는 점이다 10, 다음이 while 루프의 뜻 수 1 4 7 10,,,의 감소 나, 음의 2, 등등 5 음과에 음의 무한대에, 나 때문에 실제로 0과 동일하지 않습니다. 그리고,이 프로그램의 끝에서, 우리는 foo는 기능을 가지고 인쇄 외출 내가 그. 그래서이 짧은 사소한 프로그램입니다 그리고 버그는 분명하다, 특히 후 그냥 버그가 무엇인지했다. 하지만, 여기에 의도가 아니라,이 힘이다 실제로 일부처럼 당신의 마지막으로, 욕심의 솔루션 문제는 설정하고, 어쩌면 당신이 있습니까 프로그램의 일부 무한 루프, 당신은 아무 생각이 어떤 원인이야. 그래서 매우 유용한 디버깅 기술 다만 printfs를 추가하는 것입니다 모든 코드에. 그래서 나는 여기 외부에서 printf 할 첫 번째 while 루프. 그리고 여기에는 printf의 원하는, 난 그냥 내가 인쇄 해드립니다. 루프 동안 나는 심지어 내가 먼저 할 수 있습니다. 외부, 두 번째 루프 동안. 다시 한번, 내부 인쇄 여기서, 값 전​​. 그리고 이제이 작업을 실행 할 수 있습니다. 그래서 점 슬래시 디버그. 정수를 입력합니다. 의 13을 보자. 그리고 붐. 우리는 우리가 무한 루프 것을 볼 두 번째 while 루프의 내부. 그래서 지금 우리는 버그가 무엇인지. 그러나 printf의 디버깅을 완벽하게 중대하다 하지만 프로그램을 일단 더 길고 더 복잡가있다 더 정교한 솔루션 가지 작업지고. 그래서이 모든 printfs를 제거 할 수 있습니다. 그리고의 확실히 내가하지 않았다 만들어 보자 다 치신. OK. 그래서 우리가가는 프로그램 소개가 호출됩니다 GNU 디버거 GDB. 음, 사실, 이제 디버그를 제거 할 수 두 번째, 다시 디버깅합니다. 음, 사실 첫 번째, 좋은 교훈 명령 줄 인수에. 이 연타 명령 즉납니다 모든 것이 전달되는 컴파일 명령 줄에서,이 명령 줄 인수. 당신이 사용하는거야 그래서 정확히 어떻게 명령 줄 인수로 우리 전에했던, 당신은 PSET에서와 의지로 2, 그 연타가 그들을 사용하는 방법입니다. 그래서 주목하는 첫 번째 플래그, 대시 ggdb3, 즉 무슨 말을, 연타, 당신은이 파일을 컴파일해야 의도를 우리가 결국 것 를 디버깅 할 필요가있다. 그래서만큼 당신이 그 깃발을 가지고로, 우리는 GDB 디버그를 할 수 있습니다. 그리고 그것은 GNU 디버거를 열 수 있습니다. 그래서 명령이 많이 있습니다 당신의 정보는 다음의 제품에 익숙해 질 필요가있다. 처음 당신은 아마거야 즉시 필요한 것은 실행됩니다. 그래서 무엇을 할 거 실행된다? 그것은 우리의 프로그램을 시작하는 것입니다. 따라서, 시작 프로그램, 프로그램을 실행 정수, 13를 위해 저희에게 요청합니다. 그리고, 그것은 무한 루프는의 I 제거를 제외하고, 예상되는 printfs, 그래서 우리는 심지어 볼 수 없습니다. 정상적으로 종료. 오. 그것은 싸여있을 가능성이있는 모든 길 주변에 돌아 가기 - 그 무시. 정상적으로 종료하지 않은 가정합니다. 그에게 복잡한 대답이있다. 그래서 지금, 아주 유용하지 않습니다. 그러니 내부에 우리의 프로그램을 실행 이 디버거는 우리에게 도움이되지 않습니다 우리가 할 수 있었다 때문에 방법, 점은 GDB 외부에서 디버깅을 슬래시. 그래서 하나의 명령이 당신은 아마거야 - 나는이 종료됩니다. Control-D를하거나, 작업을 모두 종료합니다. 그럼 다시 열 수 있습니다. 또 다른 명령을 당신이 아마거야 바로 원하는 에 익숙해 휴식입니다. 그래서 우리는 지금 주에서 중단합니다 다음 나는 그것을 설명 할 것이다. 자, 우리는 우리가 중단 점을 설정 참조 debug.c이 라인. 그래서 휴식 수단은 그 때 run을 입력, 프로그램은 예정 될 때까지 계속 실행 내가 중단 점을 기록했다. 제가 실행을 칠 때, 프로그램이 시작됩니다 그리고, 그것은 즉시로 나누기 주요 기능에 들어간다. 주 휴식하는 것이 될 것입니다 당신은 꽤 일반적으로 않습니다. 그리고 지금, 당신을 소개합니다 좀 더 많은 명령에. 그것은 우리가 말하는 있다고 여기 주목 입니다 라인 11 일에 파산 printf의 정수를 입력합니다. 따라서 명령은 다음 방법이 될 것입니다 우리는 코드의 다음 라인으로 이동합니다. 이것은 우리가 단계로 허용하는 것입니다 라인으로 우리의 프로그램 라인을 통해. 그래서 다음에. 이제 라인 (12), 우리는거야 정수를 얻을 수 있습니다. 다음. 당신이 다시 Enter를 누르십시오 경우, 그것은거야 당신이 마지막으로 한 일을 다시 실행. 그래서 입력 할 필요가 없습니다 다음마다. 그래서 정수, 13을 입력합니다. 그래서 지금, 라인 (14), 내가 더 동안 10보다, 나는 다음에 수행 할 수 있습니다. 그리고 우리는 우리가 나는 감소거야 참조하십시오. 그래서 우리는 다시 난을 감소시킬 것입니다. 그래서 지금, 또 다른 유용한 명령은 인쇄입니다. 그래서 인쇄 출력 할 것입니다 변수의 값. 의이 값을 가져 보자 변수의 i. 나는 나가를 인쇄 할 수 있습니다. 그것은 내가 11 말하는거야. 이제 우리는 다음 다시 동안 나는 10보다 크다. 그래서 난 여전히보다 큰의 이 11이기 때문에 10. 나는 마이너스 마이너스. 다시 한 번 나는 인쇄 할 수 있습니다. 예상대로 10입니다. 그래서 지금, 다음. 그것은 다시 조건거야, 난입니다 10보다 큰,하지만 난 그래서 지금 10 그것은 10 이상하지, 그래서 우리는 기대 그 동안 루프 밖으로 떨어질 수 있습니다. 그리고 지금 우리는 코드 줄 아래입니다. 그리고 다른 명령, 목록, 그냥 것입니다 이전 및 다음을 표시합니다 코드 라인에서 몇 경우 당신은 자신을 잃었다. 그래서 우리는 단지이 while 루프를 종료 지금 우리는이를 입력 while 루프, 라인 (18). 내가 0 같지 않은 동안 그래서. 그리고, 다음에, 나는 우리가 거​​ 나 마이너스 3에 해당하고, 알이 그냥 계속됩니다. 그리고 우리는 내가를 인쇄 할 수 있습니다. 각 명령은 종류의 바로 가기가 있습니다. 그래서 P는 인쇄에 대한 짧습니다. 그래서 우리는 피 나는 할 수있다. 그냥 N을 들고 계속 또는 다음 일을 계속. 다시 난을 인쇄합니다. 당신은 167 음의 지금을 참조하십시오. 그래서이 영원히 계속,하지만하지 않습니다 정말 영원히, 당신이 방금 본 때문에, 실제로 어떤 시점에 종료됩니다. 그래서 GDB를 시작하고있다. 그러나 이제 GDB에 한 가지 더 해 보자. 어, 디버그. 그래서, 특히이 경우, 무한 루프는 내부​​에 일어난 주요 기능. 그리고 지금은, 단지 난 그 받아 들일 에 무한 루프를 이동하는 것 푸 기능. 단지 이것의 끝에, 그 기억 이 프로그램은, 음, 이것은 원래이었다 다만했다 foo는 호출 나는 인쇄 할 것. 하지만 지금 우리는이다, foo는 전화하는거야 그것은 0의 때까지를 감소하고, 예정 그 변수를 인쇄 할 수 있습니다. OK. 그 저장합니다. 디버그를 확인합니다. 그리고 지금, GDB 디버그. OK. 난 그냥 실행하면 그럼 난 아니 겠지 실제로 단계별 할 수 내 프로그램 라인별로 라인. 그래서 메인에서 휴식하자, 다음 실행을 입력합니다. 그래서이 통과, printf와, 입력 정수, 정수, 13를 얻을. 그래서 우리는 감분을 유지하는 것입니다 나는 10보다 큰 때까지. 그럼 우리가 넘어 가지거야 while 루프, 라인에 도착 - 의 별도의 창에서 열 수 있습니다. 나는 더 이상이 될 때까지 우리가 감소하지 다음 10보다 큰, 그리고 우리 foo는, 함수를 호출. 그렇다면 최대한 빨리 충돌로 일어난 함수 foo는, 음, 내가 foo는 호출하고, 나는 더 이상 GDB를 제어 할 수 없었다. 그래서 최대한 빨리이 줄에서 다음을 쳐서, 이런 일이 될 때까지 일을 계속, 언제 어디서 프로그램 종료 - 그것은 결국 존재하지 않는 가정합니다. 당신은 비록 조금을 위해 일시​​ 정지 보았다. 그래서 내가 왜 통제를 잃게 않았다 그 시점에서 프로그램? 나는 다음에 입력 할 때 음,, 그 간다 코드의 문자 다음 줄이 실행됩니다. 그래서 후 라인 (21), 다음 코드 줄 즉, 라인 (22)입니다 실행됩니다 메인에서 종료,이다. 그래서 난 그냥 가고 싶지 않아 코드의 다음 라인에. 나는 기능, foo는에 가고 싶어, 다음 또한 단계별로 코드의 그 라인. 그래서, 우리는 대안이있다. 이제 다시는 그만하자. 주요 휴식. 어, 1, 다음, 다음, 13, 다음, 다음, 다음, 조심스럽게, 우리는 라인 foo에 떨어지기 전에. OK. 그래서 지금, 우리는 라인 (21)에있어 우리는 foo는 전화 위치. 우리는 다음에 입력하지 않는 이후 단지 함수 foo를 호출합니다 코드의 다음 라인으로 이동합니다. 우리가 사용하고자하는 단계입니다. 그래서 단계의 차이가있다 단계가 한 단계 씩 다음, 기능 및 다음 간다 기능 이상. 그것은 단지 전체를 실행 기능과 유지하려고. 그래서 단계는 우리를 데리고 것입니다 함수로, foo는. 그리고 우리는 지금 우리가 돌​​아 왔 여기를 참조 이론적으로,의이 while 루프, 영원히 계속하는 것. 그리고 당신은 그것도 아닌 단계를 치면 호출하는 함수는, 다음의 정보가 다음과 동일합니다. 당신이 선에있을 때 그래서 그것은 단지의 그 단계 함수를 호출 다음과 다를 것입니다. 그래서 단계는 여기에서 우리를 가져올 것이다. 단계, 단계, 단계, 단계, 단계, 단계, 및 우리는 영원히 그냥 무한 루프됩니다. 그래서 당신은 그것에 익숙해 질 수도있는 무한 루프를 식별하는 방법이며, 그냥이 입력 키를 잡고 문제가 발생할 위치를 참조하십시오. 거기에 그렇게 할 수 더 나은 방법이 있지만, 지금은, 그 완벽하게 충분하다. 그리고 문체, 스타일에 부합하는 50, 나는이 일을해야합니다. OK. 그래서 마지막으로 명령을 소개합니다. 자, 안으로 디버깅 gdb를하자 그래서 그 대신 주에 깨고, 만약 I 푸 기능을 알고도 문제, 그럼 내가있을 수 있었다 단지 대신, foo는에서 휴식했다. 이 전에서 휴식 봅시다 주 및 foo는 모두. 그래서 당신은 많은 중단 점을 설정할 수 있습니다 당신이 원하는대로. 내가 run을 입력하면 돼 에 중지 - 우, 이후의 재 컴파일하자 나는 물건을 변경했습니다. 이 라인, 경고, 소스를 볼 수 있습니다 파일이 실행 파일보다 더 최근이다. 그래서 난 그냥 여기에 갔다 의미 과 스타일을 준수하기 위해 이러한 변경 50,하지만 난 다시 컴파일하지 않았다 프로그램. 그래서 GDB는 그 날을 알고 있습니다. 나는 다시 디버깅을, 종료합니다 GDB 디버그를 기록했다. OK. 그래서 이제, 내가 무엇을하고 있었는지에. 주, 휴식 foo는 휴식. 지금은 프로그램을 실행, 그래서 만약 돌 때까지 계속 진행 중단. 즉, 중단 점에 발생 주에서 첫 번째합니다. 자, 대신에 다음 일을, 다음, 다음, 다음에, 다음에, 나는 푸에 충돌 할 때까지, I 계속되는, 계속 입력 할 수 있습니다 당신은 다음 중단 점에 도달 할 때까지. 먼저 정수를 입력해야합니다. 나는 칠 때까지 계속 계속 입니다 다음 중단 점, foo는의 기능. 당신이 충돌 할 때까지 그래서 실행이 실행됩니다 때 브레이크 포인트, 그러나 당신은 run을 입력 당신은, 다음 프로그램을 시작하고있어 그 때 이후로, 계속합니다. 난 그냥 메인 중단 한 경우 및 다음 실행, 그것은에서 깰 수있을 다음 주, 그리고 계속합니다. 내가 foo는에서 브레이크 포인트를 가지고 있지 않기 때문에 정수를 입력 한 다음 지금 난 foo는에서 중단하지 않을. 그냥 무한한 것 그 때까지 루프. OK. 그래서 GDB에 소개합니다. 당신은 그것을 사용하기 시작한다 문제 세트에서. 그것은 매우 도움이 될 수 있습니다 버그를 식별합니다. 실제로 단지, 라인별로, 가면 코드를 통해, 그리고 무엇 비교 실제로 당신이 무엇을 기대 일어나고 일이, 그것은 사랑의 당신의 버그를 놓칠 어렵다. OK. 그래서 지난 주 다윗은 이것을 가져 에 대한 비밀 키 암호 물건 우리가하지 않으려는 처음으로, 암호는 단지에 저장 될 우리의 일부 일반 텍스트 파일에있는 컴퓨터, 여기서 누군가에 바로 올 수 있습니다 그것을 열고 그들을 읽어보십시오. 이상적으로, 그들은 암호화 될 것 어떤 방법으로. 그리고 문제 세트 2, 당신은 처리 할 수​​ 있습니다 암호화의 한 방법으로, 또는, 잘, 두 가지 방법이 있지만, 그들은 그렇게 큰되지 않습니다. 당신이 해커 버전을 할 경우, 당신이있어 또한 처리 될 것 몇 가지 암호를 해독. 그래서 문제는 지금 잘하더라도입니다 우리는 강력한 암호화가 세계의 알고리즘은, 경우에 당신은 선택 특히 가난한 암호, 다음 , 대단히 도움이되지 않습니다 이후 사람들 아직도 그것을 알아낼 수있을 것입니다. 암호화 된 문자열을 보는 경우에도 해당 그것은 쓰레기 엉망처럼 보이는 경우 즉, 그들에게 아무 의미들이 아직 몇 가지 암호를 시도해야 당신이 다음, 그것을 알아낼 매우 안전하지 않습니다. 그래서 동영상을보고 그 그 점을 만든다. [동영상 재생] - 헬멧, 당신은 악마. 무슨 일이야? 내 딸에게 무슨 짓이야? 화려한을 소개하는 날을 허용합니다 젊은 성형 외과 의사, 박사 필립 Schlotkin, 큰 코 전체에서 작업 남자 우주, 그리고 비벌리 힐스. - 당신의 전. - 코를? 이해가 안되는 데요. 그녀는 이미 코를 받았어요. 그것은 달콤한 열 여섯 존재했다. - 아니. 그것은 당신이 생각하는 그런게 아니야. 그것은 훨씬, 훨씬 더 나쁜. 당신은 나에게 조합을 제공하지 않는 경우 공기 방패, 박사 Schlotkin 것 그녀의 이전의 코를 당신의 딸을 제공합니다. - 아니. 어디서 났어? - 좋아. 내가 말해주지. 내가 말해주지. 아니, 아빠. 아니, 당신은 수 없습니다. - 당신이 바로, 내 사랑. 나는 당신의 새로운 코를 놓칠 수 있습니다. 그러나 나는 그에게 조합을 말하지 않을 것이다, 상관없이. - 아주 좋아요. 박사 Schlotkin은 최악의 해. - 내 즐거움. [TOOLS은 날카롭게 되 고] - 아니. 기다립니다. 기다립니다. 내가 말해주지. 내가 말해주지. - 나는 일 것이다라는 것을 알고 있었다. 괜찮아요. 이리 줘. - 조합은 하나입니다. - 한. - 한. - 두. - 두. - 두. - 세. - 세. - 세. - 네. - 네. - 네. - 다섯. - 다섯. - 다섯. - 따라서 조합 하나이다 둘, 셋, 넷, 다섯. 즉, 멍청한 조합의 나는 내 인생에서 들었다. 즉, 물건의 종류의 바보 자신의 수하물에있을 것입니다. 당신의 전, 당신을 감사합니다. - 무슨 짓을 한거야? -I 벽을 해제. - 아니, 당신은하지 않았다. 당신은 영화 전체를 해제. -I은 잘못된 버튼을 누르면해야합니다. - 그럼, 다시 넣어. 뒷면에 동영상을 넣어. - 네, 알겠습니다. 네, 알겠습니다. 의는, 아놀드 - 가자. 그레첸을 가자. 물론, 당신은 아직도 거에요 이것에 대한 대금을 청구해야합니다. [END 동영상 재생] ROB BODEN : 좋습니다. 우리는 이미에 대해 얘기하고 그래서 지금 어떤 방법으로 보안, 좋은 작은 영화 포스터, 그래서 최근에 NSA와 일,이 문제 모든 것을 감시. 그것은 당신 같은 느낌이 어려울 수 있습니다 프라이버시의 일종이 온라인 세계, 내가 말할 수 있지만 당신 PRISM의 대부분의 세부. 그래서 PRISM을 넘어, 우리는하지 않을거야 지금 그것에 대해 이야기 할 노트북에 대해 생각합니다. 그래서 여기까지 나는 전환 할 내 실제 계정에, 내 작은 펭귄. 그래서 암호를 가지고 있고, 그 암호는 내가이 원하는 무엇이든합니다. 하지만 기억이 내가 로그인 해요 그래서이 로그인로 프롬프트에서 어떤 프로그램입니다. 그것은이었다 일부 프로그램의 어떤 사람에 의해 쓰여진. 그리고 그 사람은, 경우에 그들이있다 특히 악의적 인, 그들은 할 수 말했듯이, 좋아, 그렇다면 암호 I 입력과 동일하다 내 실제 암호, 또는 동등의 정보 특별한 암호 - 다윗은 최고 또는 뭔가 - 다음을 들여 보내 따라서 악의적 인 프로그래머가있을 수 있습니다 당신의 맥의 모든, 또는에 대한 액세스 윈도우, 또는 아무것도. 그래서, 이후, 관심 많이하지 않습니다 내 말은,이 로그인 프로그램입니다 즉 OS X, 수백 발송하는 또는 수천명의 사람들이 이 코드 리뷰. 그래서, 당신은 어딘가에 코드에서, 만약 이 문자열은 등호 같으면 말 다윗이 굉장하다, 로그인, 다음 사람의 될 것 같은, 기다립니다. 이것은 옳지 않다. 이 여기에있을 수 없습니다. 그래서 우리가 일을 얻는 하나의 방법 종류의 보안합니다. 그러나 심지어 프로그램에 대한 생각 당신이 쓰고있다. 의 당신이 로그인 프로그램을 작성한다고 가정 해 봅시다. 당신이 쓴 그래서이 로그인 프로그램, 그래서 분명히, 당신은 좋은 프로그래머. 당신은 어떤 악의를 넣어 않을거야 x는 등호 경우 다윗은 굉장하다 코드에. 그러나이 프로그램을, 당신은 무엇을 할 이 프로그램을 컴파일하는 데 사용? 연타 같은 것. 그래서 만약에 일어난 사람 연타 맡았다 연타 특별 쓰기 뭔가처럼 나는 컴파일하고있는 경우 프로그램에 로그인 한 후이 코드를 입력 경우에, 말한다 로그인 프로그램에 X 같다 다윗이 굉장 같다? 그래서 꽤 아직,하지만 우리는 같은가 여기서 문제가 어디에 연타, 잘, 수천, 그렇지 않으면 수만의 사람들이, 연타 살펴 보았다 코드의 라인을 쳐다 보면서 말했​​다, 좋아, 나쁜 아무것도 없습니다. 물론, 아무도 일을하지 않습니다 이 악성 아무것도. 그러나이 같은 자신을 연타한다 내가 연타를 컴파일하는 경우? 내가 몇 가지 컴파일러가있는 경우에 그 연타에 삽입 연타를 컴파일 라고이 특별한 해킹, 모든 권리, 나는 연타를 컴파일 할 때, 다음 실행 나는 특별히 찾아야한다받을 로그인 프로그램과 삽입의 내부 이 암호는, 같음과 동일 데이브는 굉장하다? 그래서 기억이 컴파일러 자체 어떤 점에서 컴파일해야합니다. 그래서 당신은 연타를 컴파일 무엇을 선택하는 경우 그 자체는 다음, 악의적으로 전체를 조여 질 수 길 아래 라인. 그래서 여기, 우리는 켄 톰슨 (Ken Thompson)이 데니스 리치. 그래서 이것은 상징적 인 사진입니다. 데니스 리치는 오른쪽에 있습니다. 그는 전공 - 거의 다 썼다 그래서 당신은 할 수 있습니다 이 클래스를 위해 그를 감사합니다. 켄 톰슨은 왼쪽에 있습니다. 그 중 두 개는 기본적으로 UNIX를 썼다. 글쎄, 그들은 주요 참여자했다 UNIX에서. 어떤 사람이 있었다. 그런 점에서 보면 켄 톰슨,, 그는 튜링 상을 수상. 그리고 튜링 상을, 난 항상 들었어요 그것은이 방법을 참조, 그것의 정보 컴퓨터 과학의 노벨상. 그래서 튜링 상에, 그는에있다 그의 수락 연설을 제공합니다. 그리고 그는이 아주 유명한 연설에게 제공 지금, 신뢰하는에 반영이라고 우리는 연결 한 신뢰, 물론 웹 사이트에서 할 수 있습니다. 이 연설에서, 그는 모든 권리 말한다 그래서 UNIX를 쓰고, 지금은 모든 당신의 사람들은 UNIX를 사용하고 있습니다. 이제 리눅스는 오늘 기억 UNIX의 직계 후손. OS X는 직접 UNIX를 사용합니다. 윈도우는 너무 많이하지 않지만, 많은 아이디어 UNIX에서 촬영했다. 그래서 그는, 무대에 올라 말한다 좋아요, UNIX를 썼다. 그리고 너무 너희들도 알다시피, 난 모든에 로그인 할 수 컴퓨터의 하나 하나. X 만약 내가 이러한 특수 중 하나를 넣어 때문에 동일은 켄 톰슨이 굉장 동일 그때는 로그인 할 수 있어요. 그래서 사람들은, 잘처럼 어떻게 한거야? 우리는 로그인 프로그램 보았다 아무 것도 없습니다. 그는 음, 컴파일러에게 수정처럼 로그인 프로그램에 로그인 할 수 로그인 프로그램은 이제이되도록 그 X는 켄 톰슨 등호 굉장합니다. 그리고 그들은 음, 사실이 아니다,라고. 우리는 컴파일러를보고하고있어 컴파일러는 모든 라인이없는 그런 코드입니다. 그는 OK, 같은,하지만 당신은 무엇입니까 컴파일러로 컴파일? 그리고, 물론, 같은, 그들이 생각하기에, 그는의 나는 당신에게 컴파일러를 준 사람이야 당신은 컴파일러를 컴파일하여, 그래서있어 당신은 컴파일러를 컴파일하는 그 자체가 악성 및 것 로그인 프로그램을 중단. 그러니까 기본적으로, 그 시점에서, 거기에 소스 볼 수있는 방법은 없습니다 로그인 프로그램의 코드 잘못을 확인하려면 다음을 참조하십시오. 당신은에서 볼 수 없습니다 컴파일러의 소스 코드 잘못을 확인하려면 다음을 참조하십시오. 당신은 컴퓨터를보고해야 코드의 실제 이진 이, 잠깐, 볼 컴파일 컴파일러 줄의 코드는 여기 안된다. 그러나 켄 톰슨 (Ken Thompson)은 한 걸음을 내디뎠 더 잘,가 말했다 이러한 특별 프로그램을 실제로 당신이 프로그램의 바이너리를 읽을 수 있도록, 그래서 누군가가 해당 프로그램을 사용하는 경우 바이너리를 읽고, 그들은이 볼 수있을 것입니다 코드 라인. 그는 모든 말을 그 프로그램을 수정 바로, 당신이보고있는 경우 컴파일러는이 특정를 표시하지 않습니다 이진 설정합니다. 그럼 당신은 수행해야하는 단계 더 기본적으로, 그것은있을 수 있습니다 간접 찍은 여러 수준, 어떤 시점에서, 아무도 실제로 없다 점검 할 것. 그래서 이야기의 교훈은 당신이있어입니다 작성 될 수 없습니다 이 클래스에 연타. 당신은 등산을 사용하는 것입니다 이 클래스에 많은 연타. 당신이 알다시피, 연타는 악성 모든 태업되는 프로그램 하나의 프로그램은 당신은 컴파일했습니다. 그리고 바로 그 불길에 당신을 떠날 수요일에 당신을보고,주의. [박수] 스피커 2 : 다음 CS50에서. 스피커 3 : 그런 말을 감히하지 마십시오. 당신은이 작업을 수행 할 수 있습니다. 이전에이 짓을했는지, 당신은이 작업을 수행 할 수 오늘, 내일이 작업을 수행 할 수 있습니다. 당신은 년 동안이 일을하고 있었 으니까. 그냥 거기 가서이 작업을 수행합니다. 당신은이 작업을 수행 할 수 있습니다. [음악 연주]