제이슨 허쉬 호른 : 환영합니다, 6 주에 모두. 잘 살아 여러분 모두를보고 행복이고 퀴즈 0 후, 때문에 나는 알고 조금 거친했다. 그러나 다행히도, 당신의 모든 믿을 수 없을 정도로 잘했다. 그리고 그 훌륭합니다. 당신이 내 섹션에 있다면, 나는 대부분을 준 당신을 이미 퀴즈를 백업합니다. 당신의 부부는, 내가 만날거야 클래스 후. 그리고 당신은 연장 학생이라면 당신은 다시 퀴즈를받지 못한 아직, 당신의 TF 아마에 노력하고 있습니다 하고 등급을 매기, 그리고는 다시 그것을 얻을 것이다 당신에게 곧. 그래서 내 연장 학생 지금보고 - 희망을 갖고 살 - 나는 당신의 퀴즈를 얻을 것이다 곧뿐만 아니라. 다음과 같이 오늘의 일정입니다. 첫째, 우리는 몇 가지를 통해 갈거야 CS50 당신에게 제공하는 자원. 우리는 다음 퀴즈 0에 갈 예정하고있어 나는 질문에게 아무도 답변 해 드리겠습니다 특정 문제에 대한 있습니다. 그리고, 우리는 이상 갈 것 파일 I / O 및 문제 설정 5. 그 마지막 두 항목은 걸릴 것입니다 섹션의 대부분 오늘까지. 나는으로 매주 목록을 올려 모두에게 있지만, 코어의 알림 섹션, 우리는 90 분이 - 우리 모든 것을 커버 할 수없는 그 I 너희들 커버 싶어요. 그러나 우리는 리소스의 톤을해야합니까 당신이 알게대로 따라 그릴 을 통해 재료와 작업 문제는 설정합니다. 온라인에서 텍스트를 알림 당신이 경우에 작성하는 당신을 위해 설정 상자, 나에 대한 피드백이, 긍정적 인 모두 섹션에 대해, 건설. 그 URL은 바로 여기에 있습니다. 당신은 어떤이있는 경우에는, 잠시 시간을내어 주시기 바랍니다 피드백 여부 섹션 동안, 이후, 이후 당신은 비디오를 볼 온라인, 나에게 피드백을 제공합니다. 난 정말의 모든 주셔서 감사합니다. 그래서 작은 대화를 봤는데 내의 많은 일주일 내내 학생 - 내가 손으로 다시 퀴즈, 이야기 물론, 당신이하고있는 방법을보고. 하나의 테마에 와서있다 에 대해 얘기에 -에 특정 - 문제는 설정합니다. 그리고 그 테마를 캡슐화 한 지금 보드에. 기본적으로 차이가있다 뭔가 터닝 사이 제대로 뭔가 할 이 잘 이루어집니다. 대부분의 사람들은 환상을하고있다 정확성의 측면에서 - 모든하여 pset에 5의 4의. 대부분의 사람들은 점점 그 모든 시간. 그러나, 때문에 당신이 수행 한 뭔가 바로 당신이했습니다 의미하지 않는다 우아하게 뭔가를 수행하거나, 효율적으로, 또는 깨 등 그것을 할 수 있었다. 그리고 어떤 디자인의 - 그리고 낮은 정도, 스타일 - 축에 대한 것입니다. 그래서 나는 당신을 모두 밀어 및 기타 TF가 있어요 뿐만 아니라 회전에, 너희들을 추진하고있다 올바르지 만 켜 관광 정보 잘 코딩 된 것들에. 루프에 대한 불필요한 일을하지, 변수의 경우를 다시 계산하지 당신은 필요가 없습니다. 예를 들어, 뒤로 설정 문제에 대한보고 4에 벽돌을 배치 할 때 화면에서 모든 행 - 모든 벽돌 지정된 행은 같은 y 좌표가 - 같은 높이 좌표입니다. y 좌표가 필요하지 그래 내부 내부 계산 당신은 가능성이 사용 FOR 루프를 중첩 화면에 그 벽돌을 넣어. 그것은 단지마다 계산 될 필요 시간 당신은 행을 바 꾸었거나, 행을 아래로 이동했다. 10 벽돌에있는 경우 그렇게 말 열, 각 벽돌은 동일한을 가질 수 y 좌표와 y 좌표가 단지 계산 될 수있다 그 모두를위한 한. 이는 열을 산출 할 필요가 없다 배,도 않는 계산 필요 실제에서 일어나는 함수 호출 - 새로운 gracked 함수 호출. 그래서에 대한 약간의 혼란 있다면 당신, 더 일반적으로, 일이 매번 일이 필요하지 않습니다 당신은해서는 안 FOR 루프를 통해 이동 FOR 루프 안에 넣어하지 말아야 당신이 갈 때마다 발생 FOR 루프를 통해. 우리가 본 또 다른 좋은 디자인의 예 15 주 3, 당신은 유지할 수 제로 추적. 그래서 당신은, 당신을 보드를 초기화 할 때 저장 - 전역 변수에, 아마 - x와 제로의 y 좌표입니다. 그리고 그 때마다 - 당신의 이동 기능에, 때마다 확인 성공적으로 이동, 당신은 업데이트 제로의 위치. 즉, 할 필요에서 당신을 저장할 것 를 통해 볼 수있는 루프 중첩 FOR 당신의 이동 기능의 모든 시간을 탑승 과 제로를 찾거나 타일을 찾아, 다음 옆에 무엇을 확인합니다. 대신의 위치가 제로, 당신은, 아래, 위의 볼 수있다 및 그것의 왼쪽 및 오른쪽에 찾는 당신이 찾고 있던 타일. 그래서 우리가하고있는 프로그램의 측면에서 쓰기, 그들은 충분히 큰 적이 아니야 이들 디자인 결정의 일부 정말 방해하려고하는 당신 프로그램, 또는, 더 느리게 실행하게 또는 심지어 메모리가 부족. 그러나 우리는 아직도 너희들을 추진 중입니다 쓸 우아하고 그리고 가능한 한 효율적인 코드. 그래서 당신이 할 경우 필기구 끝 상당히 큰이 그 범위, 그들은 좋은 함께 기록됩니다 정확할뿐만 아니라 디자인. 그래서 당신이 다수 그를 가져왔다. 즉, 우리가 찾고있는 무언가 - 우리가 계속거야 뭔가 당신에 사람을 밀어 넣습니다. 당신은에 관한 질문이있는 경우 프로그램의 디자인, 자유로운 느낌 나에게 도달, 나는 행복 해요하기 당신과 당신의 프로그램을 통해 산책, 디자인의 몇 가지를 지적 당신이 만든, 당신에게 몇 가지를 제공 결정 확인하는 방법에 대한 제안도 더 나은 디자인 결정. 그래서 우리는 전진 할 것입니다 퀴즈 0에 대해 이야기한다. 우리가 그렇게하기 전에, 아무도하지 에 대한 질문이 무엇을 지금까지 다룬? [부스럭 거리는 잡음] 제이슨 허쉬 호른 : 7 초. OK. 이제 조금만 퀴즈 0에 대해 얘기하자. 당신의 대부분은 퀴즈 0의 등이있다. 당신이하지, 희망 할 경우 당신은 그것을 조금 기억한다. 하지만 당신은 퀴즈 0, 당신을 촬영 한 경우 또한 온라인 PDF에 액세스 할 수 있습니다 샘플 솔루션을 제공합니다. 전에 누군가가 질문이 있습니까 우리에 대해 주 재료로 점프 0 퀴즈에 특정 문제 - 왜 대답은 무엇입니까? 사람은 무엇에 대한 혼란 있습니까? 당신이 바로 문제를 가지고 있지만,도 단지 내가 그것을 조금 설명하고 싶습니다 더 많은, 지금 이렇게 행복 해요. 그래서 나는 당신 남자를 요구했다 몇 가지로 준비가 와서 퀴즈 0에 대한 생각. 그럼 누가 우리에게 좀하고 싶습니다 질문 또는 시작 퀴즈 0에 대한 의견? [용지 부스럭] 제이슨 허쉬 호른 : 없음 모두 완벽했다. 그래서 내가 알고 [웃음] 몇 가지 질문이있을가 퀴즈 약 0. OK. 예. Ompica. OMPICA : 번호 10. 제이슨 허쉬 호른 : 번호 10. 어느 숫자 10 살? OMPICA : - 제이슨 허쉬 호른 : 나는 그러세요 - OMPICA : 포함 - 제이슨 허쉬 호른 : 수 (10)는 8 살 나에 - 나는 여덟를 작성? OMPICA : 네. 제이슨 허쉬 호른 : OK. 그래서 또 다른 문제가있을 수 내가 선견지명 오전 물었다? 대답은 '예'입니다. 퀴즈 이전 섹션에서는 요청 너희들 스털링 모두를 코딩하고 8 개의 I에. 둘에게 무슨 일이 있었 퀴즈에 나타납니다. 그래서 바라건대, 당신은 지불 그에 대한 관심. 당신이 가지고 있다면, 당신은 것 아마 그 두 가지에 잘. 그러나 8 개의 I에, 우리가하지 않았다 실제로 코드 그것은 클래스에서, 그러나 다시,이었다 퀴즈에 물었다. 그래서 수행 할 몇 가지 나는 여덟 코딩 할 때주의한다. 먼저, 질문에 당이었다 당신은 확인이 필요하다고하면 문자열 널 (null)와 동등했다. 몇 사람이 나중에 확인하려고 프로그램의 경우 브래킷은 내가했다 - 그에서 너무 특정 문자 문자열 - 널 (null)와 동등했다. 그러나 널 (null)이 본질적으로 기억 - 그것을 생각하는 것이 좋다 제로 포인터를 null로 - 제로 포인터 - 메모리에있는 곳 어디 당신은 접근 할 수 없다. 그렇다면 뭔가 당신이 널 (null)과 동일 이 초기화되지 않았 음을 알고, 또는 거기에 아무것도 없습니다. 그래서 s의 문자 스타들입니다 브래킷 나는 문자입니다. 그래서, null로의 비교 의미가 있습니다 하지만의 부류는 내가 널 (null)입니다. 그러나 다시 - 그래서 첫 번째 일이었다 당신은 어떻게해야되었다는 것을 - 있는지 확인하십시오 당신이 실제로 실제 문자열을 얻었다. 다음으로, 당신은을 통해 가고 싶어 문자열의 각 문자. 그리고 그의 브래킷 같은 것 내가 예를 들어, 내가 반복기 경우. 그리고 그 문자를 가지고 가고, 그것의 실제적인 가치를 얻을. 당신은 그것을 문자로 저장했지만 제로의 ASCII 값 - 문자로 제로 - 실제로 정수 0이 아닌. 그것은 당신이 할 수있는 다른 수의 ASCII 표에서 찾아보십시오. 그래서 한 가지 방법은 그 보정하기 위해 - 를 교정하는 것이 가장 좋은 방법 그 - 그것에서 빼기된다 문자 값 - 문자로 제로. 그래서 마이너스 따옴표, 영, 또 다른 작은 따옴표. 즉 당신이 어떤 번호를 취할 것 문자로, 그리고에이 같은 얻을 실제 정수로 수. 그리고 그 방법과 매우 유사하다 많은 사람들을 도입 문제는 시저로 설정 2, 및 Viginere - 그 암호, 때 을 중심으로 회전 하였다. 당신의 숫자로이 너무 후 제로 아홉에, 다음 -에 따라 그것은 궁극의 수에가는 곳 - 당신은 그것을 곱해야 10의 힘으로. 어떤 사람들은에 뒤쪽에서 이동 전면 및 개인을 곱한 10의 힘으로 수. 어떤 사람들은에서 이동 백업하는 프런트 - 그래서 가장 높은했다 첫 번째 번호를 주문 - 그리고 사람들을 절약 할 수 글로벌 카운터 변수. 다음에 대한 매번 루프, 증식하는 글로벌 거인 하기 위해, (10)에 의해 변수에 대응 다음 문자를위한 공간입니다. 그래서하지 않고 약간 혼란이었다 내가 그것을 칠판에 작성합니다. 그러나 시료 용액 당신이 사용할 수 있습니다. 그러나 사람들은 큰 일이었다 우리는을 찾고 있었다. 또한 반드시 각 있는지 확인하는 검사 각각의 캐릭터는 참이었다 제로 아홉, 그리고 사이의 문자 같은 일부 다른 문자, 예를 들어. 사람들은 우리가 찾고 있던 것들이었다 에 대한 그 질문에. 그 질문에 대한 답변을합니까? OMPICA : 네. 제이슨 허쉬 호른 : OK. 다른 질문이 있습니다 퀴즈 0 어떻습니까? 어떻게 컴파일에 대한? 모두가 바로 컴파일? 아니오. 이 있었다 - [웃음] 에 대한 질문 컴파일 과정? 와우. [용지 부스럭] 제이슨 허쉬 호른 : 예. 마이클. 마이클 : - 임의의 숫자 7인가? 제이슨 허쉬 호른 : 번호 7. 숫자 7은 임의의 정수를 얻을 수 있었다. 우수. 그래서 당신은 정수를 부여하고있어 정수 B, 당신은 임의의 원하는 A와 B 사이의 정수입니다. 우리는 실제로이 하나에 기록 할 수 보드,이 때문에 하나의 한 줄의 코드이었다 - 그것을 할 수있는 하나의 방법입니다. 그래서 우리는 같은 DRAND 제공하고 기능은 우리가 사용할 수 있습니다. 그리고 무슨 일이 DRAND 않습니다 - 이 배정되어있어 가정 - 무엇을 반환 DRAND합니까? 마이클 : 0.0에서 1.0 사이의 부동. 제이슨 허쉬 호른 : 수 - 네. 0과 1 사이의 숫자입니다. 그래서 우리는 B와있다. 그리고 우리는 우리의 임의의 번호를 가지고 0과 1 DRAND에 의해 우리에게 주어진. 어떤 사람들은 B를 넣어하려고, 또는 B 마이너스 그 안에, 또는 뭔가 괄호. 즉, 그들이 걸 의미 이 함수에 대한 인수. DRAND 인수를 사용하지 않는다 - 있는 getString이하는 것처럼 인수를 사용하지. 그래서 가까운, 그냥 열린 괄호의 괄호 - 그리고 그 자체입니다 함수 호출. 그리고 그것은 당신에게 수를 제공합니다 0과 1 사이. 물론, 우리는 전체 범위가 숫자는 안으로 할 수 있다는 B (10)이며, 5 인 경우, 우리가 정말, 말 5의 범위와 수를 싶습니다. 그래서 우리가해야 할 다음 일은이다 범위 B 마이너스를 곱하면. 그래서이 곱있어 가정. 그리고 우리에게 전화 번호를 알려 줄게 주어진 범위 내에서. 그리고 특정 범위 인 B 마이너스의 차이. 그리고 마지막으로, 그것 단지에서 줄 것이다 - B 마이너스의 범위를 말한다 5, 그것은 우리에게주지되어 0-5 숫자. 사실 5에있는 경우에, 우리는 강화해야 그것의 위치로이 범위의 최대 사실을 추가하여, 있어야. 그래서 논리 권리를 가져옵니다. 그리고, 당신은 것 또 다른 질문? 마이클 : 아니오. 난 그냥 지금은 정말 바보 같은 느낌. [웃음] 제이슨 허쉬 호른 : 호 정말 바보 같은 생각하지 마십시오. 사람들의 숫자는 고투 이 질문. 그리고, 다른 질문은, DRAND, 당신은 말했다 당신에게 부유물을 제공합니다 - 플로트를 반환합니다. 그러나이 기능은 실제로 질문 정수가 반환 될 때까지. 당신은 명시 적으로 캐스팅 할 필요가 없습니다 정수로,이 때문에 작업은 모든으로 취급합니다 부동 - 부동 소수점 수로. 이 뜻과 같은 -도이 경우 정수,이 뜻 제대로 곱. 모든 곱셈 작동합니다. 현재 캐스팅 할 필요가 없습니다. 사실, 당신은 캐스팅하지 않아야합니다. 그 것 - 당신은 번호를 캐스팅하면 즉, 0과 1 사이의 정보 - 난수, 부동 소수점 - 다음 중 하나 그래서, 만 0 또는 1이됩니다 당신은 그 정확성을 모두 잃게됩니다. 그러나 마지막에, 당신이 돌아 왔을 때, 자동으로 가져옵니다 정수로 돌아온다. 그래서 당신은 할 필요가 없습니다 그 자신을 캐스팅. 그래서이에 대한 답이었다 그 질문에, 수 7. 퀴즈 0에 다른 질문? 그래, 애니. 애니 : 우리는 재귀를 사용할 때는 - 때 우리가 반복 루프를 사용합니까? 제이슨 허쉬 호른 : 당신은 언제 사용합니까 재귀 - 그래서 더 일반적으로, 재귀 대의 장단점 반복적 인 접근 방식. 사람은 프로 또는 사기꾼을 제공 할 수 있습니까? 나요? 아무도 할 수 없습니다. 누가 프로 또는 사기꾼을 제공 할 수 있습니까? [용지 부스럭] 학생 1 : 재귀 이하 코딩 - 더 적은 입력을? 제이슨 허쉬 호른 : 그래서 일반적으로, 재귀 특히, 기능 - 또는 병합과 같은 알고리즘 종류 - 어느 빌려 준다 재귀 적 접근 - 더 간단 수 있습니다 재귀 코드입니다. 단지 더 많은 의미를 재귀 적으로 할 수 있습니다. 그래서 재귀 프로 것입니다. 기타? 그래? 학생 2 : 재귀 콘 - 그것은 더 많은 메모리를 사용합니다. 제이슨 허쉬 호른 : 그래서 정확히 맞아. 재귀 함수는 계속 추가됩니다 스택은 스택에 프레임. 당신은 많은에서 작동하고이 경우 숫자,이 전화를해야 많은 기능, 당신은 확실히 것 반면, 더 많은 메모리를 차지 반복적 인 접근 방식은 하나를 넣어 것입니다 스택에 스택 프레임 때문에 모두가 하나의 함수 내에서 발생합니다. 다른 장점과 단점? 그래. 학생 3 : 재귀 프로. 당신이 결정할 필요가 없습니다 사전에 몇 번 코드 반복했다. 당신은 소정의 수를 가질 수있다 그런 다음, 반복 할 시간 재귀가 더 낫기 때문에, 그것은 그 결과를합니다. 제이슨 허쉬 호른 : 그 사실 생각합니다. 하지만 두 경우 모두 생각 당신은 결코 것 - 당신은 아마 몇 가지를 얻을 것 사용자로부터 입력. 아니면이 함수는 몇 가지 입력을해야합니다 그 결정하는 방법을 여러 번 실행해야합니다. 그래서 일반적으로, 당신은 하드 코드를 않을 것 - 심지어 반복적 인 접근 방법 - 여러 번 그 루프가 실행해야합니다. 당신은 당신이 있었다 다른 있었나요 애니에 대한 생각? OK. 그래서 사람들은 아마 두 가지 - 가장 큰 프로와 가장 큰 대 재귀에 사기 반복적 인 접근 방식. OK. 퀴즈 0에 다른 건? 그냥 넘어 가자. 파일 I / O 멋진 짧은이있다 이번 주 파일에 대한 I / O 그 희망 여러를 보았다 시간, 존경. 많은 작업이로 가고, 나는했습니다 그것은 굉장히 도움이 들었다. 또한,이 슬라이드에 대한 링크를 포함 경우에 당신은 없었어요 그것을 10 배를 볼 수있는 기회. 그래서, 우리는 잠시 동안 갈 수 있습니다 열고 작업하는 주요 단계 파일, 그리고, 우리는 가고있다 전에 코딩 문제에 뛰어들 문제 세트를 검사. 그래서 다시, 나는에 이것을 넣어 갈거야 화면,하지만 난에 대해 얘기하는거야 우리가 왜 왔는지에 대해 잠깐 파일을 여기에서하고 I/O-- 그게 무슨 뜻 이죠? 즉, 우리가 만들 수 있다는 것을 의미하는 우리의 프로그램을 선택한 다음 우리의 프로그램이 종료 및에 어떤 영향을 만들었하지 우리의 프로그램의 외부 세계. 그러나 우리는 파일에 대한 작업을 시작할 때 - 모두를 읽고 작성 그들 - 우리에 어떤 영향을 미칠 수 있습니다 우리의 프로그램의 외부 세계. 그냥 같은 Microsoft Word에서는 할 수 없었던 경우 다음, 모든 Word 문서를 만들려면 마이크로 소프트 워드, 당신의 전부를 종료하면 작업은 없어 질 것이며, 그것은 것 정말 쓸모가 없다. 우리는 궁극적으로 할 수 있도록하려는 않는다 에 영향을 줄 수있는 프로그램을 작성 그들 주위의 세계에 모두 복용하여 파일의 측면에서와 - 복잡한 입력 파일을 통해, 또한 흥미로운 만들기 강제적 출력 - 파일의 다른 유형의 용어. 우리가 시작하는 것도 그런 이유입니다 파일을 사용하여 작업하는 방법에 대해 설명합니다. 보다 구체적으로, 주변 우리는 다음과 같이하면됩니다. 그것은 매우 간단합니다. 이 단계의 단지 몇이 있고, 그들은이 코드를 다음과 같습니다. 그래서 우리는 통과거야 라인으로이 코드 라인. 첫째, 당신은 강조를 참조하십시오 - 당신은 파일을 작업 할 때 관계없이 파일의 분류는, 인 당신은 그것을 열어야합니다. 그리고 그은 fopen를 호출합니다 - 바로 여기. 당신은 파일의 이름이 포함됩니다. 파일, 디렉토리에없는 경우 또는 폴더 위치를이 프로그램 삶, 당신은 또한 포함해야 해당 파일이 어디에의 경로. 우리는 가정 할 것입니다 그이 "text.txt"라는 파일 - 간단한 텍스트 문서가 -입니다 이 프로그램과 같은 폴더입니다. 그래서해야 할 또 하나의 마음 - 당신은 파일을 열려면 다른 곳에서 실제로 필요 그 위치를 포함합니다. 둘째, 당신은에 인수를 전달할 수 있습니다 fopen을, 그리고 당신이 원하는 무엇 파일로. 세 가지 주요 인자가있다 당신은 fopen에 전달할 것입니다. 누가 나에게이 세 가지를 줄 수 있습니까? 누가 나에게 그 중 하나를 줄 수 있습니까? 예. 학생 4 : 파일 이름은? 제이슨 허쉬 호른 : 죄송합니다. 당신이 전달할 수있는 세 가지 주요 인자 두 번째 인수는 fopen에 관해서. 당신이 옳아 요 - 파일 이름 첫 번째 인수입니다. 그러나 fopen의 두 번째 인수는 일반적으로 세 개의 문자열, - 예. Aleja. ALEJA : APPEND를위한. 제이슨 허쉬 호른 : A, 당신이 원하는 경우 이미 존재하는 파일에 추가. 학생 5 : 읽기 R. 제이슨 허쉬 호른 : R, 만약에 당신 파일에서 읽고 싶어. 학생 6 : 쓰기위한 W. 제이슨 허쉬 호른 : 그리고, w 경우 파일에 기록합니다. 따라서이 경우, 우리가 작성하는 파일에, 그래서 우리는 w가있다. 당신이 그것을 열, 당신은 또한 저장해야 어딘가에 파일을, 그리고 그와의 의 왼쪽에 코드 대입 연산자 - 나는 파일에 대한 포인터를 만드는거야 이 경우, 파일, 호출. 우리는 걱정하지 않을 것을 이 모두 대문자 파일 것입니다. 놓고 말하면, 그것은 롱 0과 1의 스트림. 그리고 그것은 우리가가는 방법 조작하고 이해합니다. 우리가해야 할 다음 일은 - 및 이것은 매우 중요합니다 - 당신은 파일을 열 때마다 - 사실, 당신의 malloc을 호출 할 때마다, 대한 예를 들어, 일부 메모리를 얻을 시도 그리고 항상 포인터에 저장 있다는 것을 확인하기 위하여 원하는 함수는 NULL을 반환하지 않았습니다. 따라서이 경우, 우리는 할 계십니다 우리가 실제로 열려 있는지 확인 파일을 올바르게하고 있었다 우리의 프로그램에 오류가 없습니다. 다음으로, 일단 우리가 확인하기 위해 검사 한 우리는 우리가 할 수있는, 작업 파일이 있다고 에 쓰기 또는 읽을 또는 파일을 추가합니다. 이 경우, 단순히 인쇄하고 이 파일에 한 줄. 어떻게 그 알 수 있습니까? 글쎄, 난이 기능을 사용하고 있습니다 fprintf와했다. 당신이 사용하게 될 모든 기능 ,에 쓰거나에서, 또는 읽을 때 파일을 조작하는 것은 유사합니다 당신은 전에 본 적이 있지만 기능 문자 F로 시작, 파일 서. fprintf와, 우리의 일반 인쇄와 달리 응용 프로그램은, 하나의 추가 인수를, 그 파일이 어디 있는지 이 라인을 인쇄 할. 나는 아무 상관이 없습니다 ohai의 오른쪽. 나는 세 번째가 없습니다 의 printf 인자 - 또는 두 번째 인수는 printf, 세 번째 인수 인 fpr​​intf 때문에 I 여기에 어떤 자리가 없습니다. 어떤 변수를 포함하지 않는거야. 그러나 다시, fprintf와 이러한 파일의 모든 파일 조작 기능 일반적으로 파일이 필요할 것입니다 하는 그들이 운영하고 있습니다. 마지막으로, 마지막으로 중요한 것은에 수행은 같은 파일을 닫는 것입니다 와 - 우리가 뭔가를 MALLOC 때마다, 우리는 우리 않도록 뭔가를 무료로 할 메모리 누수가 - 우리가 원하는 우리의 파일을 닫습니다. 이 프로그램은 종료하지 않고 종료하는 경우 이 파일은, 확률은 아무것도 갈 것입니다 문제, 특히 경우 작은 파일이었다. 그러나 그것은 확실히 좋은 코딩 스타일 항상 파일을 닫 연습 당신은 그것을 사용을 완료 할 때. 그래서 파일의 기본 I / O입니다 당신은 아마 그 전에 본, 또는 한 그 판타스틱 단편에서 보았다. 아무도 전에 질문이 있습니까 우리는 연습 코딩로 이동 파일에 대한 문제, I / O 또는 단계는 그냥 갔다? [타이핑 소리] 제이슨 허쉬 호른 : 당신이 있습니까 질문, 아비가? AVI : 호 제이슨 허쉬 호른 : OK. 나는 서로를 기다릴거야 칠초. [웃음] 즉, 정말 좋은 팁입니다. 너희들은 좋아하지 않는다 질문을. 괜찮아요. OK. 그래서 우리의 첫 번째 연습 문제는 우리가있다 기능을 복제하는 것 명령 줄 도구 당신 아마 사본 - 이전에 사용 - 복사 도구입니다. 당신은 CP를 입력하고 다음을 전달하면 두 터미널에 인수, 당신은 할 수 파일을 복사합니다. 그리고 우리가가는 것입니다 지금 쓰고. 그래서 다시,이 슬라이드 오프 읽고, 나는 거라고 당신이 걸리는 프로그램을 작성하는 이 두 개의 명령 줄 만 인수 - 소스 파일과 대상 파일 - 복사 소스의 내용 대상 파일에 파일을 한 번에 한 바이트. 그래서에 대한 질문을 많이. 다시 말하지만,이에 좋은 방법은 다음과 같다 C 코드로 바로 이동하지만 몇 가지 단계로 분해. 첫째, 논리에 대한 생각 - 정확히 내가 무엇을 부탁 해요 - 및 모든 이해 이 문제에 대한 단계. 안 C에서, 그냥 의사 코드, 또는 심지어 정신 모델 무슨 일이 일어나고. 다음, 당신은 의사를 한 후에 파악하는 방법을 의사 도구와 우리가했습니다 가지 위에지도 C에서 사용하는 학습 그리고 마지막으로, 한 번 모든 것을이 함께, 당신은 문제를 코딩 할 수 있습니다. 5-10 분 정도 소요 이 문제에 작동합니다. 나는 지시를 놓을 게요 다시 두 번째 최대. 그리고 우리는 가서거야 의사 코드 및 코드 그것은 그룹으로 살고 있습니다. 당신이있는 동안 당신은 질문이있는 경우 이 작업 인상 주시기 바랍니다 당신의 손, 그리고 올 것이다 주위에하고 대답합니다. 학생 7 : 나는 슬쩍 수 종이? 제이슨 허쉬 호른 : 무슨 일 이죠? [타이핑 소리] 제이슨 허쉬 호른 : OK. 의 첫 번째 의사에 가자하고, 나는 당신에게 몇 가지 더주지 분 코딩을 완료합니다. 누가 저를 시작하고 싶습니다 의 첫 번째 라인 이 기능에 대한 의사? 학생 8 : 있는지 확인하십시오 당신은 두 개의 파일을 부여했다. 제이슨 허쉬 호른 : OK. 그리고 우리가하지 않으면? 학생 8 : I는 0을 반환합니다. 제이슨 허쉬 호른 : 우리는 0을 반환해야합니까? 학생 8 : 반환 - 블랭킹. 미안 해요. 제이슨 허쉬 호른 : 네. 아마 0. 0 모든 것이 좋았다 의미하기 때문이다. OK. 그래서 첫 번째 줄의 의사의. 누가 의사의 두 번째 라인을 가지고? 학생 9 : 파일을 모두 열기? 제이슨 허쉬 호른 : 두 파일을 엽니 다. OK? 학생 10 : 확인 파일이 NULL 인 경우? 제이슨 허쉬 호른 : 확인하십시오 반드시 NULL 없습니다 둘. 옆으로 - 0 슬래시 - 즉 NULL입니까? 학생 11 : 호 제이슨 허쉬 호른 : 그것은 NULL이 아니다. 즉 NULL 종료라고합니다. 그것은 실제로 하나의 'L'(으)로 철자. 그래서에 대한 뭔가를 확인 - 그 사실은 캐릭터의 - 그래서 대책이됩니다 확인 볼 체크와 동일하지 않는 경우에 NULL 같습니다. 그리고 어떤 사람들 - 자신의 퀴즈와 자신의 문제에 세트 - 가지고있다 혼란 그 두 가지. 그러나 그 두 가지가 있습니다 다른 사실. 하나는 문자열을 끝 - 하나는 0의 포인터이다. 학생 12 : 왜 확인하지 않을 파일이 NULL이 있는지 확인 당신이 그들을 열기 전에? 제이슨 허쉬 호른 : 그래서 열려 저장 해당 파일에 뭔가. 그리고 당신이 여기에 가면 - 그래서이 선 -은 fopen - 당신에게 주소와 저장소를 제공합니다 그것이 작동하는 경우 파일에 해당 주소. 작동하지 않는 경우, NULL을 저장합니다 - 학생 12 : 오. OK. 당신을 얻었다. 제이슨 허쉬 호른 : 파일에서. 그래서 당신은 NULL을 확인 할 수 당신이 그들을 연 전에. NULL 뭔가하지 않았다 의미 제대로 작동. OK. 확신도를 확인하기 위하여 검사? 또는인가? 우리는 무엇을 생각 하는가? 우리는 그와 함께 갈 것입니다. 학생 13 :입니다. 제이슨 허쉬 호른 :인가? 입니다 어느 쪽? 학생 13 :입니다. 제이슨 허쉬 호른 : OK. 우리는 몇 가지를 갖고있는 것 같다 그에 대한 합의. NULL입니다 둘. OK, 의사의 다음 행. 누구는 아직 나에게 줄을 작성하지 않았습니다? 우리는 당신을 기다립니다. 그래. 학생 14 : 당신은 읽을 필요가 첫 번째 파일에서? 제이슨 허쉬 호른 : OK. 학생 14 : 아니면 우리가 fscanf를 사용하거나 그 첫 번째 파일과 같은? 제이슨 허쉬 호른 : 그래서 우리가 원하는 첫 번째 파일에서 읽고 - 의 바로 여기 그 넣어 보자. 소스 파일에서 읽습니다. 그리고, 우리는 우리가 후에 무엇을해야합니까 소스 파일에서 읽어? 다른 사람? 학생 15 : 쓰기에 대상 파일? 제이슨 허쉬 호른 : 우리는에 기록 대상 파일 및 - OK. 우리는 다른 무엇을 누락? 나에게 부여하지 않은 다른 사람 아직 코드의 라인 - 의사의. 그래. 학생 16 : 아마도 당신은 항상 확인할 수 있습니다 여부에 대한 읽을 수있는 뭔가가있다, 다음 줄에 드 셨나요? 다음 줄처럼 그, (있는 경우)를 참조하십시오. [전자 음] 제이슨 허쉬 호른 : 죄송합니다. 그건 내 저널링 소프트웨어입니다. 그래? 학생 16 : 그래. 제이슨 허쉬 호른 : 그래서 포기 그것은 나에게 한 번 더. 학생 16 : 거기에 있는지 확인 에서 여전히 다음 줄 읽을 수있는 소스 파일. 제이슨 허쉬 호른 : OK. 그래서 우리는 라인을 읽는 아니에요 - 여기에 바이트를 읽고 있었다 - 하지만 당신이 맞아요. 우리는 때까지 읽기 및 쓰기 할 더 이상 바이트가있다. OK. 그래서이 정말 들여 쓰기해야한다 비트, 그들이 거기에서이기 때문에. 오른쪽? 우리가 바이트 아웃 될 때까지, 우리는거야 소스 파일에서 읽기 및 쓰기 대상 파일에. 그리고 마지막은 무엇인가 의사의 라인? 주어지지하는 사람 내가 뭔가 아직. 학생 17 : 파일을 닫습니다? 제이슨 허쉬 호른 : 그렇지. 파일을 닫습니다. 그래서 우리의 의사가있다. 나는에 의사를 넣을거야 gedit를, 그리고 몇 분에 우리 함께이 코드를합니다. OK. 우리는 그룹으로 시작하자. Nishant, 내 새로운 파일이 있습니다. 난 그냥이를 열었습니다. 제목 없음 자료 1. 내가해야 할 첫 번째 일이 무엇입니까? NISHANT : 라이브러리를 포함? 제이슨 허쉬 호른 : OK. 어떤 라이브러리? NISHANT : STDIO.H, 인 stdlib.h, 저는 믿습니다? 제이슨 허쉬 호른 : OK. 에 대한 표준 라이브러리는 무엇입니까? NISHANT : 나는 잊었다. 제이슨 허쉬 호른 : OK. 그래서 표준 입출력 (가) 있습니다. 난 전에 무엇을해야합니까 나는 코딩을 시작? NISHANT : 헤더를 쓰기? 제이슨 허쉬 호른 방법 : 그것은 색깔의 내가합니까? [개재 목소리] NISHANT : 어떻게 당신이 색깔받을 수 있나요? 제이슨 허쉬 호른 방법 : 나는 색 구분합니까? NISHANT : 모르겠어요. 오. 저장합니다. 제이슨 허쉬 호른 : 저장합니다. 예. 나는. C로 저장해야합니다. 그래서 cp.c.로 바탕 화면에 저장 달콤한. 그리고 전체 스타일을 얻으려면 점, 무엇을해야 하나 상단에 포함되어 있습니까? NISHANT : 당신은 당신의 이름, 이름을 쓸 수 프로그램 및 목적 뿐만 아니라 프로그램의? 제이슨 허쉬 호른은 : 좋은 보인다. 우수. 그래서 당신은 완벽하게 우리를 시작했습니다. # 포함 - 우리는 또한 다음과 같이 작성할 수 있습니다 - OK. 그래서 난 내가 모든것을 셋팅 것 같아요. 누가 나를 위해 코드의 첫 번째 라인을 가지고 - 또는 코드의 첫 번째 줄 것을 그것은 우리의 첫 번째를 충족하기 위해 취할 것 의사의 의견? 당신. 학생 18 : 그것은 INT 있어야하지 ARGC, 다음 문자 * ARGV? 제이슨 허쉬 호른 : 내가 생각하는 당신 말이 맞아. 의는 주, 열린 괄호를 int로 변경하자, INT의 ARGC, 쉼표, char *로 변수는 argv? 그 마음에 드 셨나요? 학생 18 : 브래킷. 제이슨 허쉬 호른 : 브래킷. 오픈 브래킷, 대괄호, 가까운 부모. 완벽한. 지금은 명령 줄 인수를 취할 수 있습니다. OK. 우리는 두 개의 파일을 제공하고 있는지 확인합니다. 당신은뿐만 아니라 나에게 그것을 줄 수 있습니다. 학생 18 : ARGC 경우 - 이 하나는 3와 동일하지 않습니다. 제이슨 허쉬 호른 : 만약 열린 괄호 3 ARGC이 동일하지 않는 이유는 무엇입니까? 학생 18 : 그래, 당신은 돌려 1 또는 아무것도. 제이슨 허쉬 호른 : 죄송합니다. 학생 18 : 반환 1 또는 아무것도. 제이슨 허쉬 호른 : 1을 반환합니다. OK? 좋아요. 두 파일을 엽니 다. 누가 나에게이 두 파일을 열 수 있습니다? 누구는 아직 나에게 코드를 작성하지 않았습니다? 커트? KURT : 그래서 모두 대문자 F-I-L-E 스타 소스. 제이슨 허쉬 호른 : 나는 갈거야 모음을 촬영합니다. 사람들은 근사합니다. 그것은 텀블러처럼. 학생 18 : fopen을 같음 - 제이슨 허쉬 호른 : fopen을 같음? 학생 18 : 오픈 괄호, ARGV 오픈 브라켓. 제이슨 허쉬 호른 : 잠깐. 미안 해요. 열기 괄호. OK. 학생 18 : 그래. ARGV 하위 1. 제이슨 허쉬 호른 : 하위 1? 학생 18 : 그래. ARGV 오픈 브래킷 1 - 예. 그리고 쉼표, 다음 열기를 두 번 견적, R, 큰 따옴표, 닫기 괄호, 세미콜론. 제이슨 허쉬 호른 : 스위트. 그리고 어떤 다른 하나는? 학생 18 : 매우 유사하지만, 대신 S-R-C, 당신은 D-S-T를 호출 할 것입니다. 제이슨 허쉬 호른 : 됐지! 나는 그것을 좋아한다. 학생 18 : 그냥 D-S-T. 그래. 그리고, 2 오픈 브래킷을 argv를. 그래. 그리고 w 대신 R. 그래. 제이슨 허쉬 호른 : 지금. 라인의 다음 커플. 또한, 누구는 추가 정보가있는 경우 우리가 한 라인에 부담 뿐만 아니라 사람들을 추가합니다. 확실히 어느 쪽도 NULL입니다 확인하십시오. 누가 나에게 내가 필요로하는 코드를 제공 할 수 있습니다 의사의 라인을 만족? 아처. 아처 : SRC는 등호 같으면 NULL 또는 DST는 등호와 동일 NULL, 당신은 반환 - 제이슨 허쉬 호른 : 무엇? 아처 : 2를 반환? 제이슨 허쉬 호른 2를 반환합니다. 그래서 열린 괄호의 SRC가 동일한 경우 NULL 동일, 또는 - 그 thing's 무엇이든 - 파이프? 관? 우리는 파이프를 호출합니다. 파이프, 파이프, DST는 등호와 동일 NULL, 2를 반환합니다. OK? 우리는 바이트 아웃 될 때까지 - 우리는 종류의에서이 단계를 건너 뛸 여기까지 진행에 대한 의사 코드의 일부입니다. 그러나 때까지 우리는 바이트 중입니다 - 그 소리는 같은 무엇을합니까? C 구조의 유형 - 하지만 단어의 구조를 사용하지 않는, 우리는 사용하기 시작하는 것입니다 때문에 다른 경우에 - 하지만 C 도구처럼 소리를합니까? 학생 19 : 루프. 제이슨 허쉬 호른 : 루프. 루프 같은 소리. 그럼 누가 나에게 첫 번째 라인을 제공 할 수 있습니다 바로 여기에 루프 코드? 당신은 또한 선택할 수있는 종류의 당신이 나에게주는 경우 루프 당신이 원하는 이 코드 줄. 3 종류가 있습니다. 당신은 선택하세요. 나는 그 중 하나를 제안했다. 아비. 당신은 어느 쪽을 원하세요? AVI : FOR. 제이슨 허쉬 호른 : FOR. AVI : 나는 = 0에서 Int. 제이슨 허쉬 호른 : OK. AVI : 나는 확실하지 않다이 부분. 하지만 난 크기보다 작은 스타 소스? 나는 그 모르겠어요. 제이슨 허쉬 호른 : OK. 당신이 원하는 때문에 : AVI 파일의 크기, 오른쪽? 제이슨 허쉬 호른 : 그래서 이것은 아마하지 않습니다 우리에게 실제의 크기를 줄 바이트 파일. 그래서 우리는 다른 무엇을 할 수 있을까? 루프의 또 다른 유형은 무엇입니까? 또는 우리는 FOR 루프에 충실해야한다고? 학생 20 : 당신은 WHILE 루프를 할 수 있나요? 그리고, 당신이 할 줄은왔다 갔다 했군요입니다 - 우리는 파일에 대한 문자 *를 가지고 있기 때문에. 우리는 단지 증가 계속 그렇다면 그 우리는 NULL 문자에서 찾아 낼 줄 때까지 그것의 끝? 또는 NO, 파일이 방법을 작동하지 것입니다? 제이슨 허쉬 호른 : 그래서 우리가 유지할 수 있습니다 * 문자를 증가 우리는 NULL을 찾을 때까지 - 학생 20 : 기본적으로 계속 문자 단위로 우리가 공격 할 때까지 파일의 끝에. 제이슨 허쉬 호른 : 예. 그래서 우리가하려는 것입니다. 우리는 독서, 문자를 유지하려면 문자로, 우리는에 도달 할 때까지 파일의 끝에. 학생 20 : 네. 찾기 - 종료 또는 정지 신호는 무엇입니까 텍스트 파일의 끝에. 제이슨 허쉬 호른 : OK. 그래서 우리는 파일의 끝에 얻을 때 - 우리는 어떻게 우리가 도달했습니다 알고 파일의 끝에? 내가 전화 했어 경우 -보기 그래서 다시 단계를 보자. 기능은 무엇입니까? 의 바로 여기이 선에 가자. 소스 파일에서 읽습니다. 누가 나에게 코드 줄을 줄 수 있습니까? 학생 21 : Fscanf? 제이슨 허쉬 호른 : Fscanf. OK. 내가 읽고 싶은 경우, 매우 즉, 한 바이트? 학생 21 : 모르겠어요. 제이슨 허쉬 호른 : OK. fscanf보다 간단한 - 무엇인가 - 나는 소스 파일에서 읽고 싶어? 소스 파일에서 읽습니다. 기능은 무엇입니까 - 네. 학생 22 : 그것은 FREAD입니까? 제이슨 허쉬 호른 : FREAD. 나는 이제 고집 할 생각 지금은 하나. 인수의 종류 FREAD 걸립니까? 학생 22 : 아마 파일 형식, 다음 파일의 위치? 제이슨 허쉬 호른 : 무엇을 나는 여기에 입력 할 수 있습니다 파악하는 인수의 유형 FREAD 걸립니다? 다중 학생 : 남자 FREAD. 제이슨 허쉬 호른 : 남자 을 fread 및 fwrite는. 그들이 함께 놀 것 같습니다. 그래서 FREAD 얼마나 많은 인수를? 학생 23 : 4. 제이슨 허쉬 호른 : 그것은 걸립니다 네 개의 인수. 그것은 포인터 크기를 받아, 그 이상한 것은, 일부 파일. OK? 이제 여기에 대해 읽어 보자. "기능을 fread는 n 개의 MEMB를 읽고 데이터 요소, 각 크기 바이트 긴 스트림에서가 가리키는 위치에 그들을 저장, 스트리밍 포인터가 없습니다. " 그래서 네 개의 인수. 내가 왜 이걸 복사하지 마십시오, 바로 여기에 붙여 넣습니다. OK. 그럼 누가 작성을 시작할 수 있습니다 나를 위해이 인수? 아비. AVI : 무효을 가져 가라. 단지 SRC를 넣어. 포인터와 별을보십시오. SRC를 넣어. 다음 - 제이슨 허쉬 호른 : 그래서 그만거야 거기에, 그 잘못 때문에. 당신은 SRC와 맞아,하지만 SRC 어디를 가야하나요? [개재 목소리] 제이슨 허쉬 호른 : 그것은해야 여기에 이​​동합니다. 즉, SRC의 - 우리의 SRC는 유형입니다. 여기서 살펴 보자. 이 FILE * 유형을 요청, 우리 실제로 보통 그런 그들을 참조하십시오. 그래서이의 인수를 요구한다 * SRC 불리는 스트림을 파일을 입력합니다. OK? 관광 명​​소 어떤 크기 우리가 읽고 싶어? 나는 당신에게이 준 문제 설명을 표시합니다. 학생 24 : 한 번에 한 바이트. 제이슨 허쉬 호른 : 한 바이트. 바이트는 어느 정도입니까? 그 크기는 바이트, 그래서 무엇을 나는 바로 거기에 넣을 수 있습니다? 학생 25 : 한. 제이슨 허쉬 호른 : 한. 오른쪽. 그 크기는 단위 바이트에, 그래서 1은 1 바이트입니다. 한 번에 읽는 방법을 많은 싶어. 학생 26 : 하나? 제이슨 허쉬 호른 : 한 가지. 나는 사이즈의 물건을 읽을 수 한 번에 한 바이트. 나는 그것을 읽어 일단 어디 그것을 배치해야합니까? 학생 27 : 목적지? 제이슨 허쉬 호른 : 그래서 둘 수 없다 그것은 바로 목적지로. 학생 28 : 당신은 들어갈 거 그것은 세 번째 포인터로? 학생 27 : 목적지에. 제이슨 허쉬 호른 : OK. 그래. 학생 29 : 당신이 뭔가를 선언 할 수 있습니다 임시 저장 이전에 역할을합니다. 제이슨 허쉬 호른 : OK. 나에게 줘. 학생 29 : 다른 파일 포인터, 아마? 제이슨 허쉬 호른 : OK. 그래서이 무효 성입니다 - 그것은 형식 무효 성, 그래서 그렇지 않습니다 파일 포인터해야합니다. 그리고 한 바이트를 읽고 있어요 경우, 좋은 장소가 될 것 인 한 바이트를 저장하는 방법? 학생 29 : 배열? 제이슨 허쉬 호른 : 배열입니다. OK. 그리고 뭔가 다른 것입니다 한 바이트의 크기를? 학생 30 : 문자 *? 학생 29 : 그래. 제이슨 허쉬 호른 : 문자 * 1 바이트 아니다. 학생 29 : 문자. 제이슨 허쉬 호른 : 문자는 1 바이트. 오른쪽? 그럼이 버퍼를 호출 할 수 있도록하는 것은 일반적인 것입니다 저장하는 이러한 것들에 사용 된 이름 뭔가 일시적으로. 그래서 버퍼를 만들 수 있습니다. 오른쪽? 그러나 그것은 * 무효을 않습니다. 아마 당신은 맞다 그것이 크기 0의 버퍼해야한다. 그래서 하나를 저장합니다 - 권리. 때문에 바로이 - 문자 버퍼는 문자입니다 만, 이 * 빈 공간을합니다 - 포인터. 그래서 지금은이 작업을 수행 할 수 버퍼에 대한 포인터입니다. 나는 다른 무엇을 할 수 있을까? 학생 31 : 숯불 옆에 별표를 넣습니다. 제이슨 허쉬 호른 : 나는 할 수 이 * 숯불 만들었습니다. OK. 내가 할 수있는 또 다른 점은 무엇입니까? 나의이 하나 가자. 숯불 * 버퍼, 그래서 여기에 넣을까요? 학생 31 : 버퍼. 제이슨 허쉬 호른 : 버퍼. 버퍼는 문자에 대한 포인터입니다. 그리고 그 위치에, 우리는 려구요 우리가 읽은 것을 1 바이트. 그래. 아비. AVI : 그냥 빠른 질문. 당신은 버퍼를 MALLOC 하시겠습니까? 제이슨 허쉬 호른 : 수 그 질문에 대답? 학생 32 : 글쎄, 그것은하지 않습니다 정말 지금 무엇을 가리키고, 그래서 - 제이슨 허쉬 호른 :하지만 할 우리는 그것을 MALLOC 싶어? 학생 32 : 당신은 그것을 수행하는 경우 그 당신이 필요로하는 것 때문에 방법, 나는, 그래, 추측 그것은 가리하는 곳. 제이슨 허쉬 호른 : 우리를 수행 그것을 MALLOC해야? 학생 33 : 당신은에가는 경우 루프의 외부에 사용합니다. 제이슨 허쉬 호른 : 우리는 갈거야 루프 외부에서 사용? 학생 34 : 예. 학생 35 : 잠깐. 우리는 그것을 선언 할 마십시오 이후에 루프? 제이슨 허쉬 호른 : 그래서 우리가 생각 여기에 우리가있어 몇 가지 의사 WHILE 루프 , 알아 내려고 노력하는 우리는 아직까지 못 했어. 우리는 그것을 MALLOC 할 필요가 없습니다. 우리는 주에서 운영하고, 그것은 단지거야 이 루프 내에서 사용합니다. 그것은 존재 할 필요가 없습니다 이 밖에. 그래서 지역 변수가 될 수 있습니다. 당신은 포인터가 지역 변수. 학생 36 :하지만 아니에요 무엇을 가리키는. 제이슨 허쉬 호른 : 아니, 아니다 아무것도 초기화. 그러나 우리는 또한 사용하지 않을거야. 우리는 뭔가를 넣어거야 그것은 처음 우리가 그것을 사용할 수 있습니다. 그래서 OK 보인다. 그래서 우리는 여기에 malloc에​​ 필요하지 않습니다. 그리고 그대로 확인을 생각합니다. OK. 우리는 FREAD 라인. 의 다음 줄을하자. 우리가 파일에 쓰고 싶은 경우, 무엇인가 그렇게하는 데 사용할 수있는 좋은 기능? 학생 37 : fwrite는? 학생 38 : fprintf와? 제이슨 허쉬 호른 : fprintf와는 하나입니다. 또 다른 하나는 무엇입니까? 학생 39 : fwrite는. 제이슨 허쉬 호른 : fwrite는. 그리고 우리의 목적을 위해, fwrite는, 우리가 여기에서보고있는 것입니다 아마 더 나은 선택. 그것은뿐만 아니라 네 개의 인수를 취합니다. Nishant, 당신은 줄 수 인수 나? NISHANT : 첫 번째의가는 다만 버퍼합니다. 제이슨 허쉬 호른 : OK. NISHANT : 두 번째의 다만 1이 될 것. 세번째는 1이 될 것. 그리고 네 번째는 DST가 될 것입니다. 제이슨 허쉬 호른 : 사람이 있습니까 그 라인에 대한 질문? 즉, 좋아 보인다. OK. 그래서 지금 우리가하고있는 한 가지처럼 보이는 누락 - 사실의 작성하자 이 마지막 줄. 파일을 닫습니다. 누가 기록을 우리를 완료 할 수있다 이 마지막 두 줄? 예. 죄송합니다, 당신의 이름은 무엇입니까? 루시 : 루시. 제이슨 허쉬 호른 : 루시. 루시 : 다음 FCLOSE SRC와 fclose를 대상. 제이슨 허쉬 호른 : FCLOSE, 열린 괄호, SRC, 닫기 괄호, 세미콜론. 그리고 fclose를 - 그래? 루시 : 열기 괄호, DST 다음 세미​​콜론. 제이슨 허쉬 호른 : 지금. 그리고 끝에서 무엇을 포함해야합니까? 루시 : 0을 반환합니다. 제이슨 허쉬 호른 : 0을 반환합니다. 내가해야합니까? 그냥 질문을합니다. 우리는 반환 0을 포함해야합니까? 다중 학생 : 아니오. 제이슨 허쉬 호른 : 호 홈페이지가 자동으로 수행 당신이 마지막에 도착합니다. 하지만 난에 대한 좋은 생각 명시 적으로 포함한다. 우리는 다른 반환하고, 특히 프로그램 전반에 걸쳐 일. OK. 이것은 우리가 무엇을 놓치고 있는지입니다 - 뭐라고? 누가 몇 가지 생각할 수 있습니다 - 의 어떤 의미가 무엇 일 거기에 갈 수 있을까? 그냥 어떤 의사의 경우에도 언어와 같은? 우리는 정말 무엇인가 - 무엇을 우리는 때까지 가고 싶어? 그래, 루시. 루시 : 파일의 끝입니다. 제이슨 허쉬 호른 : 파일의 끝입니다. 그래서 당신은 파일의 마지막에 무엇을 의미합니까? 루시 : 당신이 도달하면 파일의 끝은 중지합니다. 제이슨 허쉬 호른 : OK. 그래서 일단 우리는 파일의 끝에 도달한다. 우리가 도달했을 때 우리는 어떻게 알 수 있습니까 파일 끝에? 학생 40 : 나는 버퍼를 생각한다 NULL로 설정됩니다. 학생 41 : 버퍼가 선언 루프 내부. 제이슨 허쉬 호른 : 그래서 당신은 생각한다 버퍼가 NULL로 설정됩니다. 왜 NULL로 설정 버퍼까요? 학생 40 : 때 당신 때문에 FREAD, 당신은 넣어 위해 노력하고 버퍼에 아무것도. 제이슨 허쉬 호른 : OK. 그래서 당신은 FREAD을 생각 - 우리의 끝에 도달했을 때 파일, 무엇을 fread는 할거야? 난 그 질문의 생각 우리가 파악해야합니다. FREAD은 무엇입니까? 그것은 버퍼에 NULL을 넣어, 또는 않습니다 그것은 다른 일을합니까? 우리는 어떻게 그것이 무엇을 알아낼 수 있을까? 학생 42 : 남자. 제이슨 허쉬 호른 : 남자. 그럼 여기 보자. 값을 반환합니다. 성공을 fread에 반환 fwrite는 읽거나 쓸 수있는 항목의 수입니다. 이 숫자는 바이트의 수와 같 크기가 1 인 경우에만 전송. 오류가 발생하거나, 단부의 경우 파일 도달, 반환 값은이다 짧은 항목 수 또는 0. 그래서 우리의 목적을 위해, 경우 FREAD 도달 파일의 끝에, 그리고로부터 판독 파일의 끝은 왼쪽 아무것도 없어 읽기, 무엇 반환 할거야? 학생 43 : 제로? 제이슨 허쉬 호른 : 무엇? 학생 43 : 제로? 제이슨 허쉬 호른 : 제로. 그것은 0을 반환하는 것입니다. 그래서 우리는 우리가했다고 FREAD을 알고 파일의 끝에 도달 예정 0을 반환합니다. 우리는 어떻게 우리의 이점에 그것을 사용할 수 있습니까? AVI : 당신은 외부 변수를 선언 할 수 있습니다 체크 불리는 루프. 검사가 동일한 경우 - 지금 - 한. 제이슨 허쉬 호른 : OK. AVI : 그리고 당신은 IF를 넣을 수 있습니다 바로 FREAD 말 이후 if 문 FREAD가 0 인 - 아니. 제이슨 허쉬 호른 : 누가 아비를 도울 수 있는가? AVI : 값은 무엇입니까 FREAD에 의해 반환? 제이슨 허쉬 호른 : 우리 단지 그 동안 갔다. AVI : 당신이 그것을 어떻게 표현합니까? 제이슨 허쉬 호른 : 그래서 반환 -하자 여기 봐 - 그것은을 반환 본질적으로 size_t와, 정수. 그래서 정수를 반환합니다. 우리의 경우는 것 1 또는 0을 반환 - 1 그것은 한 가지 읽으면 - 한 바이트, 0 우리는 한계에 도달 한 경우. 그래서 FREAD 경우 - 그래? 학생 45 : 당신은 단지 전체를 넣을 수 없습니다 에 FREAD (버퍼, 1, 1, SRC) while 루프? 제이슨 허쉬 호른 : 그래서 당신은 제안 거기에 이런 짓을? [개재 목소리] 제이슨 허쉬 호른 : 잠깐. 그래서 우리는 그것의 면하게하고 있습니다. 그래서 당신은 퍼팅 제안하고 FREAD 거기에? 우리는 또한 이동해야 당신이 원하는 경우에? 학생 45 : 외부 버퍼입니다. 제이슨 허쉬 호른 : 우리는해야 또한 여기를 이동합니다. 학생 45 : 그러나 않는다는 것을 지속적으로 앞으로 이동? [개재 목소리] 제이슨 허쉬 호른 : OK. 그래서이 Okshar 제안 것입니다. 우리는 우리의 버퍼를 만듭니다. 우리 WHILE의 FREAD는, 우리는 fwrite를. 이에 대한 생각? 학생 46 : 내 유일한 문제는 것입니다 실제로 커맨드를 실행 FREAD? 제이슨 허쉬 호른 : 지금 질문입니다. 당신은 함수 호출을 퍼팅 할 때 조건 내에서, 이러한 작업을 수행합니다 함수 호출이 실행? 우리는 전에이의 예를 본 적이있다. 오른쪽? 학생 46 : OK. 그래. 그래서 실행하지 않습니다. 제이슨 허쉬 호른 : 우리는 우리의 것을 본 적이 그 전에, 우리는이 곳과 상태의 내부 함수 호출. 그 함수 호출을 실행합니까? 예. 그래서 대답은 '예'입니다. 이 함수 호출이 실행됩니다. 그러나 다시, 그것은 우리가 원하는 무엇인가? 우리가 이해할 수있는 하나의 방법은 무엇입니까 그것은 우리가 원하는 무엇을 밖으로 있다면? 다중 학생 : 그것을 실행? 제이슨 허쉬 호른 : 우리는 그것을 실행할 수 있습니다. 우리가 그렇게하기 전에, 우리는 할 수 있었다 또한이를 통해 이유. 만약 - 우리가 한 바이트가 있다고 우리 우리가 여기에 도착합니다, 파일, 우리는이 코드를 얻을 수 있습니다. 이 실행됩니다. FREAD 한 바이트를 반환합니다 그것은 버퍼에 저장합니다. 그리고 이것은 1로 평가합니다 오른쪽 후 그는 1을 반환합니다. 그래서 WHILE 1. 그 내부의 코드를 의미 하는가 WHILE 루프가 실행됩니다? 학생 47 : 그래. 그것은 사실입니다. 제이슨 허쉬 호른 : 예. 1은 true입니다. 은 0이 아니다. 그래서 여기에 내 코드가 실행됩니다. 그래서 우리는 그것을 쓸 수 있습니다. 우리는 다시 이동합니다 라인을 다시 한 번. 이제 우리는이 - 우리는 우리의 파일의 끝입니다. 우리는 우리의 파일의 끝에서 읽기 우리는 그것을 하나의 바이트를 가지고 있기 때문이다. FREAD 0, 저장을 반환 버퍼에 뭔가. 솔직히 모르는 것을 그것은 버퍼에 저장합니다. 우리는 아마 찾아 볼 수 그것이 무엇을 참조하십시오. 솔직히 모르겠. 우리는 무엇을 걱정 사람, 모르는 그것은 버퍼에 저장? 하지만 0을 반환 않습니다. 0 실행하는 동안 것인가? 0은 실행되지 않습니다있다. 그래서 우리는 여기에서 아래로 이동합니다. 그래서 손의 쇼를하자이 경우 우리가 실행하거나, 우리의 경우해야하는 코드입니다 첫 번째 변경을해야한다. 당신이 생각한다면 - 만약 당신이 투표를해야합니다. 당신은 우리가이 코드를 실행해야한다고 생각하는 경우 있는 그대로, 손을 들어주세요. OK. 하나가있다 - 당신은 질문, 우려 사항이 있습니까? 그래. 학생 48 : 우리는 버퍼를 이동 한 후 루프의 외부에, 우리가 할 그것을 MALLOC해야? 제이슨 허쉬 호른 : 지금 질문입니다. 우리는 외부의 버퍼를 이동 한 후 루프는, 우리는 그것을 MALLOC해야합니까? 이 범위의 문제이다. 우리는 외부의 버퍼를 초기화하면 이 루프, 그것은 존재 루프의 내부? 다중 학생 : 예. 제이슨 허쉬 호른 : 예. 그 범위는 루프 내부 커버 와, 정말, 아무것도 안쪽을 아래 를 포함하여이 코드의 여기에 내부 것들. 그래서 우리는 그것을 MALLOC 할 필요가 없습니다. 그것은 지역 변수, 그리고 그 범위 여전히 루프가 포함되어 있습니다. 학생 49 : 우리가 그것을 해제해야합니까? 제이슨 허쉬 호른 : 우리를 수행 무료 버퍼가 필요하십니까? 학생 49 : 그래, 우리의 malloc을하지 마십시오. 제이슨 허쉬 호른 : 우리를 수행 무료 버퍼가 필요하십니까? 우리는하지 않습니다. 다시, 로컬 변수, 그래서 우리는 그것을 해제 할 필요가 없습니다. OK. 의가 어떻게되는지 보자. 그래서는 초기화되지 않은 상태입니다. 즉, 무엇을 어떤 것을 마커스는 이전에 제안했다. 그래서 우리는 오류, 변수 버퍼가 여기에 사용하는 경우 초기화되지 않습니다. 우리가 어떻게 해결할 수 있습니까? 학생 50 : 그것을 MALLOC? 학생 51 : NULL 같음? 학생 52 : 버퍼가 NULL에 해당 말해봐. 제이슨 허쉬 호른 : OK. 좋아 보인다. 우리는 지금이. 의 복사를 시도하는 무언가를 만들 수 있습니다. 그래서 우리는 우리의 텍스트 파일이 있습니다. 우리는 어떻게이 프로그램을 실행할 수 있습니까? 그래. 학생 53 : 당신은 점을 수행 할 수 있습니다 CP, Test.txt에 슬래시. 그리고 당신은 다른 파일 이름을 지정할 수 있습니다 그것은에 저장할 것이다. 제이슨 허쉬 호른 : OK. 우리는 그것을 out.txt 전화 할게. 쿨? 원세그 오류. 세그먼트 오류에 대한 생각? 이것은 좋은 것입니다. 우리는 어떻게 알 수 세그먼트 오류가 무엇입니까? 무엇? 학생 54 : GDB. 제이슨 허쉬 호른 : GDB. 우리는 GDB 점 슬래시를 작성하여 GDB를 실행 우리 프로그램의 이름. 거기 명령 줄 인수가 없습니다. 우리는을 설정하는거야 주에서 브레이크 포인트. 내가 GDB를 시작하려면 어떻게해야합니까? 학생 55 : R. 다음 R. 그리고 무엇 : 제이슨 허쉬 호른? 학생 55 : 인수? 제이슨 허쉬 호른 : 다음 명령 줄 인수. 의를 통해 살펴 보겠습니다. N은 선으로 나에게 라인을하고있다. 나는 갈거야 때까지 내 세그먼트 오류를​​ 얻을. 내 세그먼트 오류가 있습니다. FREAD가 발생하는 것 같습니다 내 세그먼트 오류. 나는 FREAD 내 세그먼트 오류가 발생 알고 그 때문에 선 우리는 그냥 실행. 그리고했던 건 그 라인에서 일어나는 - 두 가지 일이 있었다. FREAD가는 한 후, 우리는했다 일부 WHILE 확인을 수행. 장담 컨대 그 WHILE 확인 내 세그먼트 오류를​​ 일으키는 원인이되지 않았습니다. 대부분의 경우, FREAD했다 내 세그먼트 오류의 원인. 또한 여기에 뭔가 memcopy를 참조하십시오. 메모리 사본. 메모리를 이동하는 것 같은데 다른 하나의 위치. 일어날 법한 소리 FREAD에서, 어쩌면 약간의 메모리 여기에 여기에서 이동. 의가 또 다시 가자. 어떻게 그것을 시작 않는다 하고 다시 실행? 그래. 학생 56 : 당신은 넣어해야합니까 버퍼 앞에 앰퍼샌드? 제이슨 허쉬 호른 : 그래서 전에 앰퍼샌드 버퍼는 나에게 주소를 줄 것입니다 * 문자입니다 버퍼. 의이 한 번 더 시간을 통해 실행할 수 있습니다. 어떻게 한 번 더 그것을 통해 실행합니까? 학생 57 : 수 방금 다시 실행 입력? 제이슨 허쉬 호른 : 그냥 다시 실행을 입력합니다. 그래서 우리는 안돼 이 줄을 실행합니다. 그래서 버퍼는 NULL 포인터입니다. 수정? 그것은 가리키는 - 보자. 우리가 가지고있는 경우에 우리의 -을 이의 빠른 그림을 그립니다. 경우 모두가 볼 수 여기에 씁니까? 그래서 스택에, 우리는 지역이 변수 그것은 버퍼라고하고, 는 문자에 대한 포인터입니다. 어떤 주소이 숯불에있다? 학생 58 : 0x0으로. 제이슨 허쉬 호른 : 오른쪽. 즉,이는거야. 여기에서, 버퍼 안에, 0x0으로 저장됩니다. 즉, 우리가 무엇을 - 우리는 지금이 설치. 그래서이 줄을 fread, 뭔가를두고 어디 소스에서? 이 상자하거나 상자에? 어떤 상자? 상자 또는 오른쪽 상자를 왼쪽으로? 이 권한 상자. 이 포인터를 따라, 여기에 넣습니다. 우리는에 시도하고 터치 메모리 때 위치 0, 우리는 무엇을 어떻게해야합니까? 세그먼트 오류. 그것은 우리가 지금 가지고있는 오류입니다. 그래. 학생 59 : 당신은하지 마십시오 스타 버퍼를 넣어? NO 또는? FREAD 하시나요? 제이슨 허쉬 호른 : 그래서 FREAD 포인터를 사용합니다. 그래서 버퍼에 전달합니다. 그리고이 있습니다 해제 참조 어딘가 FREAD 내부에. 그러나 다시, 우리가 본, 그것은 포인터를 사용합니다. 우리는 그것을 스타 버퍼를 통과 할 필요가 없습니다. 즉, 전달 될 것이다 그것은 여기에 무엇이든. 그리고 아마 우리에게 오류를 줄 것이다 우리가 그것을 해제 참조하고 있기 때문이다. 오른쪽? 우리는이 포인터를 참조에게 탈 때, 때 우리는이 위치에 액세스하려고, 우리는 오류가 있어요 - 우리의 세그먼트 오류. 그래서 - 죄송합니다. 우리는 GDB 중 종료 될 것입니다. 우리의 라인 - 우리의 문제는 - 맞다 여기이 선에. 그리고 문제의 때문에 이 라인의. 우리는 어떻게 상자를 만들 수 있습니다 FREAD에 액세스 할 수 있습니다. 오른쪽? 우리는 하나의 상자를 만들 필요가 바이트 큰, 문자의 크기. 그러나 우리는 그 상자에 액세스 할 수 있어야합니다 이 기능을 실행하면. 어디 - 그래. 어떤 아이디어? 학생 60 : 그냥로 설정 어떤 임의의 문자. 그냥 문자 버퍼 등호에게 할 문자. 그리고, 당신이 거기에 버퍼 때 - 제이슨 허쉬 호른 : 잠깐. 문자는 버퍼? 그래서 더 스타? 학생 60 : 네. 별을보십시오. 임의의 문자와 동일합니다. 제이슨 허쉬 호른 : OK. 그래서 나에게 하나를 제공합니다. 학생 60 : 마음의 또는 뭔가. 그리고 당신은 버퍼가있을 때 거기, 당신은을 사용하여 - 학생 61 : 스타? 아, 앰퍼샌드. 학생 60 : 앰퍼샌드를 사용합니다. 제이슨 허쉬 호른 : OK. 그리고 무엇 fwrite는 약? 학생 60 : 다시 앰퍼샌드를 사용합니다. 제이슨 허쉬 호른 : 좋습니다. 그래서 당신의 생각이며, 우리는 문자를 작성하고 다음에 뭔가를 넣고, 그 문자에 기록. 학생 60 : 네. 제이슨 허쉬 호른 : 무엇 사람들은 생각 하는가? 학생 62 : 그것은 뒤얽힌 것. 제이슨 허쉬 호른 : OK. 현실을 끌어 보자. 그래서이 시간, 나는이를 그릴거야 우리 다음 여기에 스택에 빨간색, 그리고 해야합니다 - 우! 미안 해요. 그래서 이번에는 우리가 뭔가라는이 버퍼, 그리고 스택이다. 수정? 그리고 우리는 처음에, 그것은에 저장하고 있습니다. 그 다음 우리는 FREAD에 우리가 전화를해야합니다. 무엇을 fread는 그것에서 바이트를 걸립니다 않습니다 우리의 파일은 어딘가에 저장합니다. 그것은 무엇에 넣 일이 가리키는 것. 글쎄, 우리는이 주소를 가지기 전에 - 0x0으로. 이제 우리는 어떤 주소를 가지고 있습니까? 학생 63 : 무엇이든 주소 버퍼입니다. 제이슨 허쉬 호른 : 무엇이든 주소 버퍼입니다. 아마 될 것 그런 식으로. 아마 B로 시작 예정 다음 F,​​ 그리고 다른 여섯가 16 진수. 중요하지 않습니다. 일부 주소. 그리고 우리는 안으로 해당 주소를 전달하고 그리고 우리는 우리의 하나를 넣어거야 해당 주소의 바이트 것. 그래서 우리는 우리를 넣어거야 바이트 것은 여기에 내부. 그리고 우리는에서 쓸거야 내부는 여기에 지금까지 무엇이. 아무도 질문이 있습니까 에 대해? 누가이 코드가 작동합니다 생각? 당신이 생각하는 경우에 당신의 손을 들어 이 코드는 작동합니다. 당신은 입장을해야합니다. 누가이 코드가 작동하지 않습니다 생각? 손을 올립니다. 다른 사람이해야한다 손을 제기. OK. 마이클, 당신은 어디에 서 있습니까? 마이클 : 내가 결정할 수 없습니다. 종류의 중간에. 제이슨 허쉬 호른 : 넌 중간에. 하나를 선택하십시오. 마이클 : 나는 믿음을 가지고 있습니다 그것이 작동 말한다. 제이슨 허쉬 호른 : OK. 당신은 믿음을 가지고 작동 말할 것? 무슨 일이? [개재 목소리] 제이슨 허쉬 호른 : 없음 세그먼트 오류. 우리는 어떻게 확인할 수있는 경우 두 가지가 동일? 두 파일은 동일합니다. 학생 64 : 차이. 제이슨 허쉬 호른 : 차이. 사이의 차이를 비교 확인 그것이 돌려 두 개의 파일, 경우 아무것도, 그들은 동일한 아니야. 우리가 여는 경우에, 우리는 우리의 파일을. 그래서 올바른 해결책이었다. 이제 그것을 한 번 더 돌아 보자. 우리는 사실조차하지 않았다 초기화 할 필요가있다. 아마 조금 보일 것 당신은 두지 않은 경우 청소기 거기에 임의의 뭔가. 포인트가되는, 당신이 작성하는 데 필요한 뭔가를 저장하기 위해 약간의 공간 FREAD 뭔가를 가지고 fwrite는 중. 그리고 그 일이 있던 지역이 될 수 있습니다 스택에 변수 - 만약 당신이 일부 공간을 malloc이 있었어. 그래서 우리는 실제로있을 수 있습니다 기록 malloc과, 그리고 그 일 것입니다. 그리고 우리는 저장되었을 것 어딘가에 힙에 우리 물건. 그러나 이것은, 아마, 실제로 가장 우아한 솔루션입니다. 그냥 스택에 공간을 만들 이런 일들은 이동하십시오. 나는 두 가지 다른 의견이있을 것입니다. 이에 회전을하고한다면 다음 내 의견이 득점 기회 다음과 같이 될 것입니다. 이 1 여기, 나에게, 보라, 마법의 숫자 등을들 수있다. 이 1, FREAD의 측면에서, 의미가 있습니다. 즉, 사물의 수의 읽거나 쓸 수 있습니다. 그러나 여기이 하나해야 아마 다른 뭔가. 그래서 하나의 솔루션은 무엇입니까? 학생 65 바이트의 크기입니다. 제이슨 허쉬 호른 : 그 마음에 드 셨나요? 학생 65 : 문자의 크기입니다. 제이슨 허쉬 호른 : 문자의 크기입니다. 그래, 바이트는 형식이 아닙니다. 문자 작품이 너무 크기. 우리의 상단에있을 수 우리의 코드, # 그 정의. 뭔가 BYTE 및 호출 정말 문자입니다. 사실, 더 나은 방법 이되었을 수 있습니다 - 단위. 아무도 그게 뭔지 알아? 미안 해요. 나는 거꾸로 있습니다. 아니, 기다립니다. 그것은 어떤 길을 가야 하는가? 아무도 그게 뭔지 알아? 그래. 학생 67 : 표준화 도와야 시스템 것들에서 그 이 - 부호없는 정수처럼 8 바이트가 있는지? 제이슨 허쉬 호른 : 때문입니다 정확히 맞아. 다른 컴퓨터에서 문자의 크기 - 없는 보통 문자. 숯은 보통 1 바이트입니다. 그렇지만 다른 데이터 형식의 크기는 32 비트 시스템에서 서로 다른 크기의 64 비트 컴퓨터 대. uint8_t는 항상 8 비트 - 항상 한 바이트. 그리고 포함 할 필요가 표준 INT 헤더 파일. 그래서 지금이 아마 있었을 것이다 이 코드를 작성하는 가장 좋은 방법. 그래서 나는 마법의 숫자를 제거. 그리고 또한 더 논리적이 버퍼 입력합니다. 그것은 그것이 바이트 단순히 CHAR 아니다 이는 우리가 될 것으로 기대 것입니다. 그리고 여기까지, 우리는 실제로했습니다 좀 더 강력한되었습니다. 우리는 어떤 문자를 부르지 않을거야 - 어쩌면, 누구 아는 것은 - 다를 수 있습니다 다른 기계에 크기. 우리는 실제로이 정확하게 말을하는지 한 바이트, 항상 상관없이. 우리가 여기에서 보면, 우리는 CP를 확인합니다. 어 - 오. 무슨 일이? 학생 68 :이 전환 될 수 있습니다. 제이슨 허쉬 호른 : 무엇? 학생 69 : 그것은인가? 학생 70 : 당신은하지 않았다 유형으로 정의합니다. 학생 71 :하지만해야 표준으로 정의 될 수있다. 학생 72 : 무슨 일이야? 학생 73 : 정의해야 모두 대문자 수? 제이슨 허쉬 호른 : 그래서 그것은 아니다 정의 #. 사실,이 경우, 난 형식 정의를 사용하는 것. 우리는 그것을 사용하고 있기 때문에 한 위치에있는 형식. 따라서이 경우, 우리가 실제로 원하는에 우리는 새로운 유형을 인쇄하는 것처럼 형식 정의 바이트, 그리고 이것은 본질적이다. 그것은 # 정의보다 조금 다릅니다. 그리고 지금, 우리의 코드는 완벽하게 작동합니다. 그래서, 다시 # 뭔가 걸리는 정의, 사방에 그것을 대체 다른 것으로. 그냥 매크로의 - 속기는 마법의 숫자를 제거하는. 그러나이 경우, 때문에 우린 형태로 사용 - 여기 - 그래도 문제가 해결하기 위해서, 우리는 필요 무엇이든 바이트 형식 정의합니다. 그리고 우리는 바로 여기에서 정의하고 있습니다. 그것은 사실이다, 구조체 아니다 다만 부호없는 정수입니다. 그것은 하나의 바이트 길이입니다. 이 코드는 온라인으로 제공 될 것이며 여러분 모두는 지금 당장이 있어야합니다. 그래서 우리는이 - 완벽한 - 13 분 가서 왼쪽으로 이상의 문제는 5를 설정합니다. 나는 함께 copy.c을 걷고 싶어 그리고, 우리는 간단히 얘기하자 다른 부분에 관하여 문제의 집합입니다. 그래서 내가 copy.c.을 끌어 보자 그리고 좋은 점은 우리가 실제로했습니다입니다 이미 많은 코드를 작성합니다. 우리는 문자 그대로 쓴 코드 단지 나는이 때 여기에서 나온 내 자신이 글을 쓰는. 그러나 이것은, copy.c 인 기초를 형성한다 의 처음 두 파트 whodunit.c에 대한 설정 문제되는 당신이 작성해야하고, resize.c. 세 번째이자 마지막입니다 Recover.c, 문제 세트의 일부가 아닌 이 파일을 기반으로. 해당 파일을 작성해야 할 것입니다, 우리는 당신에게 그것을위한 템플릿을 제공합니다 파일, 그러나 그것은 아무 상관이 copy.c. 함께 할 수있는 그러나 copy.c는의 기초이기 때문에 처음 두 부분으로, 우리는거야 지금 그것을 통해 도보, 그래서 당신이 필요합니다 그것이 무엇의 좋은 감각. 그리고 코멘트는 그것의 일부를 포기. 우리는 이미이 중 일부를 서면으로 작성했습니다. 첫째, 우리는 확인하고있어 우리는 3 개의 인수를 얻을. 다음으로, 파일 이름을 기억하고. 그래서 우리는이 단계를 건너 뛸 때 우리는 우리의 일을 코딩 - 때 우리의 CP. 그러나 여기, 그들이 만들고있어 조금 청소기 그것. 그들은 확인하는 검사입니다 모두 이미지, 좋은 을 여는뿐만 아니라. 우리는 지금이 모든 코드를 작성, 그래서 난 이 코드에 연연하지 않을. 다음에 특정의 몇 가지 물건입니다 우리가 사용하는 파일의 종류에있는 비트 맵 파일입니다. 비트 맵 파일은 일부 메타 데이터가 그들과 관련된. 그래서 바이트의 첫 번째 커플 파일에 대해 말해. 그들은의 색상 수 없습니다 그 화상의 화소. 그들은 파일에 대해 말해. 그리고 당신은 문제 세트를 읽는다면, 당신은 더 많은 정보를 가지고 있습니다 메타 데이터 구조의 유형에 비트 맵에 포함되어 있습니다. 우리는이 첫 번째 이유하지만 그건 바로 여기에이 코드 - 설정합니다. 우리는 메타 데이터를 읽고 - 메타 데이터의 두 가지 - 파일 헤더와 정보 헤더. 그리고 우리는 그것을의 일부를 확인하는 확실히 그것은 진정한 비트 맵 파일인지 확인 계속하기 전에. 그리고 또, 이러한 정보는 우리가 있습니다 지금에 갈 필요가 없습니다. 당신이 문제 세트를 읽는다면, 당신은이를 이해할 것이다. 길고도 짧은 이야기, 이건 그냥 말, 이것은 비트 맵 파일이며, 그 확인. 다음으로, 우리는 사람들을 작성하는 아웃 파일. 우리는 여기에서 그를 참조하십시오. 우리는 밖으로 포인터로 쓰고있어. 다음으로, 우리는 패딩을 결정하고 있습니다. 그래서 다시로는 까다로입니다 비트 맵 파일은, 일부 라인 풍향 끝에 패딩. 그리고 당신은 문제 세트를 읽는다면, 당신은 패딩에 대한 자세한 내용은 있습니다. 이 패딩을 찾을 수있는 공식이다. 기억하는 것이 중요합니다 - 는 비트 맵의​​ 크기를 변경할 때 , 패딩 파일 변경. 당신의 크기를 변경할 때 , 패딩 파일 변경. 그것은 될 것 적이 없어요 3보다 큰 - 그것은, 3을 포함하는 0이 될 수 있습니다. 하지만 당신의 크기를 변경할 때 뭔가, 패딩 변경. I는 해당 행에 하나의 픽셀이있는 경우, I , 3 바이트의 패딩을 필요로하기 때문에 각 행은 네 가지의 배수이어야한다 비트 맵 파일의 바이트 길이. 그러나 나는 그것을 두 번하는 경우, 하나의 화소에서 이동 이 화소에, 각각의, 의 말을하자, 바이트, 그때 필요가있다 만들기 위해 패딩 두 바이트 4 그 같은. 그래서 뭔가의 크기를 변경할 때, 나는 양을 변경해야 패딩의 내가있다. 즉, 모든 사람에게 의미가 있습니까? 다음은 각 행을 반복, 또는 모든 행을. 그리고 우리는을 반복 각 행의 각 열에. 우리는 같은이 비트 맵을 처리하고 그리드와 같은 우리가 처리 한 15 보드. 같은 우리는 벽돌을 처리 할 때 우리는 화면에 인쇄. 행 및 열의 그리드. 다음 - 우리는이를 보았다. 우리는 실제로 이걸 코딩. 우리는 약간의 임시 저장소를 만들었습니다. 우리는 거기에 읽고, 우리는 코드를 작성하기 만하면됩니다. 이것은 우리가 방금 한 정확히입니다. 내가 말했다 다음, 때문에 각 라인 어떤 패딩으로 끝나는, 우리 패딩 건너 - 기존의 패딩. 그리고 우리는 그것을 다시 추가. 이 경우, 우리는 만드는 똑같은 파일입니다. 우리는 단지 그것을 복사하는. 따라서이 라인은 종류의 바보입니다. 우리는 할 수 말 그대로 그냥 안으로 패딩을 넣어 하지만 파일의 크기를 변경하는 경우, 당신은 여전히​​이 라인을 원하세요? 우리는 파일의 크기를 변경 그렇다면, 우리는 여전히 건너 싶어 기존 패딩에? 학생 74 : 예. 제이슨 허쉬 호른 : 그래서 우리는. 이, 다시, 상품 때문에 소스 파일과. 우리는 패딩에 대한 상관 없어 소스 파일. 우리는 다음 라인으로 이동합니다. 그러나 우리는 단순히 다시 넣지 않는다 패딩 된 금액입니다. 우리는 다시 배치해야 패딩의 새로운 양. 그래서 우리는의 크기를 변경 할 때 파일, 우리는 여전히 건너하려면 이전 파일의 패딩 - 무엇을 우리는에서의 읽고. 그러나 우리가 작성하는 것을, 우리는거야 다른 몇몇이 다시 배치해야합니다 패딩의 번호가 우리는 결정했습니다. 그래. 학생 75 : 그 두 가지의 순서 라인, 오른쪽 중요하지 않습니다? 당신이 취급하고 있기 때문에 다른 파일. 제이슨 허쉬 호른 : 그렇지. 이들 두 라인의 순서 중요하지 않습니다. 우리는이 라인을 작성합니다. 이 파일을 여기에 우리는에 기록하고 있습니다. 즉, 중요, 그래서 우리는 얻을 패딩의 적당한 양. 이있는 파일을 처리 할 수​​ 있습니다. 우리는 바로 건너 뛰 패딩에. 우리는 읽을 수 없다 - 우리는 한 번에 한 바이트를 읽고 있다면, 우리 그 패딩 바이트에 대해 걱정하지 않는다. 우리는 다음 라인으로 이동합니다. 마지막으로 루시가 우리에게 준 것처럼, 우리는 파일을 닫고 0을 반환합니다. 그래서이 copy.c.입니다 그리고 우리가 실제로 쓴 - 우리가 대부분의 시간 본질적으로,이 글을 쓰는 부분. 이했다. 그렇게 잘하면 당신은 좋은 감각을 가지고 여기에서 무슨 일이 일어나고 있는지의. 큰 차이는, 정직하게, 단지이다 다루는 첫 번째 부분 비트 맵 파일의 특수성. 그래서 나는 나의 다음 슬라이드로이 우리가 어떻게해야합니까? 그럼, 추리 소설에 대해 생각하자. 그리고 누군가가 누구를 통해 읽기 문제 설정, 우리는 무엇을 할 추리 소설에 할 필요가? 단순히. Aleja. ALEJA : 당신이 부분을 꺼낼 수 있습니다 빨간색 표시 각 픽셀의. 그리고 - 종류의? 제이슨 허쉬 호른 : OK. 그래서 각각의 부분을 꺼낼 빨간색 표시 픽셀. 즉, 모든 가까운, 그러나 아니다. 학생 76 : 음, 거기에 그것을 할 수있는 다른 방법. 제이슨 허쉬 호른 : OK. 나에게 하나의 방법을 제공합니다. 학생 76 : 모든 빨간색을 가지고, 다음 강조하는 파란색과 녹색. 제이슨 허쉬 호른 : OK. 그래서 다음과 같은 방법을 모두 제공 - 우리는 그것을 픽셀을주는 것처럼, 사운드 그것 빨강, 파랑, 녹색의 수준을 가지고 있습니다. 우리는 상대 수준을 변경하려면 따라서, 적색, 청색, 녹색 그 픽셀에. 이 코드에서 우리는 변경해야합니다 어디에 상대 빨강, 파랑, 녹색 주어진 픽셀의 수준. 우리는 그것을 읽은 후 - 우리는 그것을 기록하기 전에? 나에게 줄 번호를 제공합니다. 다중 학생 : 83. 제이슨 허쉬 호른 : 83. 그래서 여기. 추리 소설의 경우, 코드는 다음을 수행해야합니다 쓰기는 모두 거기 가야한다. 그리고 그 코드 만의 당신이 작성해야합니다. 우리가 듣고처럼, 모두 당신이 필요하기 때문에 이렇게,이 상대적으로 파란색을 변경합니다 각 픽셀에서 빨강과 녹색 수준. 당신은 그것을 읽어 봤는데, 지금은있어 를 작성하는 것. 어떻게받을 수 있나요 -이 일이있는 경우 바로 여기, 배 부르고, 그것은의의 RGBTRIPLE을 입력 - 물론, 우리는 bmp.h에서 보았다면, RGBTRIPLE은 무엇입니까? 학생 77 : 그것은 구조체입니다. 제이슨 허쉬 호른 : RGBTRIPLE 구조체이다. 우리는 바로 여기 것을 볼 수 있습니다. 그래서 나는, 말, 액세스하려는 경우 구조체의 빨강 레벨, 어떻게 할 이 구조체의 붉은 수준을하십니까? [CLASS 들려오] 학생 78 : RGBTRIPLE.rgbtred? 제이슨 허쉬 호른 : 맞습니까? 학생 79 : 그것은 트리플해야 대신 RGBTRIPLE 점의 점? 제이슨 허쉬 호른 : 트리플. 배는 지역 변수이므로, 여기에, 여기에 포인터가 없습니다. 그래서 우리는 단지 점 표기법을 사용합니다. 이것은 나에게 빨간색의 수준을 제공 할 것입니다. 나는 그것을 변경하려면, 그냥 설정 그것은 다른 무언가 같음. 그래서 다시,이 코드 줄은 액세스 이이 구조체 내부 변수와 우리는 새로운 무언가로 설정할 수 있습니다. 그래서 추리 위해, 다시이있다 본질적으로, 우리는 무엇을 할 필요가있다. 매우 간단합니다. 그냥 상대 수준을 변경하고, 코드가가는 곳이다. 다른 한편으로는, 크기 조정, 조금 까다 롭습니다. 사실, 크기 조정은 아마도 이 문제의 가장 까다로운 부분을 설정합니다. 우리는 그것을 통해 갈 수있는 3 분있다. 그러나 다시, 우리는 이미 작성했습니다 이 코드의 대부분, 그래서 우리 꽤 잘 알고 있어야합니다. 우리가하고 싶은 몇 가지가 무엇입니까 당신이에 읽은 경우, 크기 조정 문제는 설정? 당신은 저에게주는 경우에, 우리 그들에 대해 말할 수있다. 우리가 원하는 몇 가지가 무엇입니까? 학생 80 : 수직 - 그래서 당신은 수평 크기를 조정해야 그러나 수직뿐만 아니라 크기를 조정? 제이슨 허쉬 호른 : 그래서 우리가 제공하는 경우 픽셀, 우리는 그것을 크기를 조정하려면 두 가지 요인, 지금해야 가로 크기 조정 및 크기 조정 수직. 그 의미가 있습니까? 그래. 그래서 아마 가장 큰 문제. 그리고 우리는 초에 그것에 대해 이야기 할 것입니다. 그래. 학생 81 : 내가 생각하는 방법 당신은 인쇄를 아웃 필요했다 - 제이슨 허쉬 호른 : 잠깐. 당신이 무슨 짓을했는지 말해주지 않습니다. 우리는 논리에서 이야기하는 것입니다. 학생 81 : OK. 질문은 무엇입니까? 제이슨 허쉬 호른 : 당신은 그냥 손을 올렸다. 의심의 여지가 없었다. 내가 그것을 제시 할 수 있습니다. 나 그냥이 간략하게 논의하자. 그래서 우리는, 우리는 하나의 픽셀하고자 한 수평, 그것을 복제하고 수직. 이상적으로 우리가 여기서하는 일은이다 우리 우리 화소 읽어, 우리는 그것을 쓰기 시간의 그러나 많은. 하지만 우리는 여기에 우리의 트릭을 가지고 있기 때문에 우리는로 이동합니다 다음 라인 그리고 상기 물품 다음 줄의 시작. 그래서 우리는 모두 복제 할 경우 수평 및 수직 무엇인가 이 작업을 수행하는 하나의 좋은 방법 - 좋은 비록 그 할까? 그래서 우리는 지속적으로 추구 할 필요가 없습니다 우리의 파일의 주위에 물건을 배치합니다. 그 질문은하지 못할 수도 감각을 만들었지 만, 나는 생각한다 그것에 대답하는 데 도움이됩니다. 학생 82 : 배열을 만들기? 제이슨 허쉬 호른 : 그래서 생각하자 행으로 각 파일의. 의 행의 관점에서 생각해 보자. 우리는 우리의 작은에서 우리의 첫 번째 행이있는 경우 그림, 우리는 해당 행을 만들 수 있습니다 큰 그림에서 큰 행에, 다음 그러나 해당 행을 복제 이 복제 될 필요가 여러 번, 오히려 픽셀로 픽셀을가는 것보다, 때 혼란을 가져옵니다 파일을 처리. 우리가 있던 경우에 때문에 - 나는 공간이 부족 해요. 이것은 우리의 파일이며, 우리는이 경우 그 거기에 하나의 픽셀, 우리는 그것을두고 싶은 바로 거기에, 우리는 여전히 몇 가지가 거기 우리가 때가는 그 필요 쓰기, 새로운 파일을 생성 - 우리의 파일이 두 배나 크다. 그러나 파일의 기능을 정말 어렵다 새로운 라인을 건너 뛸 수 그런 다음 여기에 돌아가 거기에 물건을 넣어. 이 작업을 수행하는 것은 거의 불가능하다 그런 그 말이 있다면. 우리가 행의 관점에서 생각한다면, 우리는 할 수있다 우리의 행을 다음 넣어 - 수직 행을 복제합니다. 그리고 우리가 크기를 조정 처리 방법 수직이 아니라 수평보다. 그 종류를 신속하게, 그리고 조금 혼란. 불행하게도 우리의 시간이 다. 나는 당신의 그 밖에 서서 여기에 대한 질문이있는 분 복구 등의 문제 세트. 그래서 지금은 연기 할 수 있습니다. 그리고 또, 당신은 질문이있는 경우에는, 우리는 외부의 대화를 나눌 수 있습니다.