1 00:00:00,000 --> 00:00:07,810 2 00:00:07,810 --> 00:00:09,840 >> เจสัน Hirschhorn: ยินดีต้อนรับคุณ, ทุกคนที่จะสัปดาห์ที่ 6 3 00:00:09,840 --> 00:00:14,790 ฉันมีความสุขที่จะเห็นคุณทั้งหมดมีชีวิตอยู่และดี หลังจากทดสอบ 0, เพราะฉันรู้ว่า 4 00:00:14,790 --> 00:00:15,810 เป็นบิตหยาบ 5 00:00:15,810 --> 00:00:18,370 แต่โชคดีที่ทุกท่าน ไม่ได้ดีอย่างเหลือเชื่อ 6 00:00:18,370 --> 00:00:21,680 และเพื่อให้เป็นที่ยอดเยี่ยม 7 00:00:21,680 --> 00:00:25,840 ถ้าคุณอยู่ในส่วนของฉันฉันได้รับมากที่สุด ของคุณสำรองแบบทดสอบของคุณแล้ว 8 00:00:25,840 --> 00:00:28,050 >> คู่ของคุณผมประชุม หลังเลิกเรียน 9 00:00:28,050 --> 00:00:32,360 และถ้าคุณเป็นนักเรียนขยายและ คุณไม่ได้รับการตอบคำถามของคุณกลับมา 10 00:00:32,360 --> 00:00:35,490 ยัง TF ของคุณอาจทำงานกับมัน และการจัดลำดับและจะได้รับมันกลับ 11 00:00:35,490 --> 00:00:36,490 กับคุณในไม่ช้า 12 00:00:36,490 --> 00:00:39,650 ดังนั้นนักเรียนส่วนขยายของฉันที่มี ดูตอนนี้ - หวังว่าจะมีชีวิตอยู่ - 13 00:00:39,650 --> 00:00:42,880 ฉันจะได้รับแบบทดสอบของคุณ ไม่นานมานี้ได้เป็นอย่างดี 14 00:00:42,880 --> 00:00:45,670 >> วาระการประชุมของเราในวันนี้เป็นดังนี้ 15 00:00:45,670 --> 00:00:50,170 ครั้งแรกที่เรากำลังจะไปกว่าบาง ทรัพยากรที่ CS50 ให้กับคุณ 16 00:00:50,170 --> 00:00:54,590 เรากำลังจะไปกว่าการทดสอบ 0 ถัดไปและ ผมจะตอบคำถามใด ๆ ของใคร 17 00:00:54,590 --> 00:00:57,360 มีเกี่ยวกับปัญหาโดยเฉพาะอย่างยิ่ง 18 00:00:57,360 --> 00:01:02,050 แล้วเราจะไปกว่า ยื่น I / O และปัญหาตั้ง 5 19 00:01:02,050 --> 00:01:07,360 ที่สองหัวข้อที่จะใช้เวลา ขึ้นเป็นกลุ่มของส่วนวันนี้ 20 00:01:07,360 --> 00:01:11,680 >> ฉันใส่รายการนี​​้ขึ้นทุกสัปดาห์เป็น เตือนให้คุณทั้งหมด แต่ของแกน 21 00:01:11,680 --> 00:01:14,650 ส่วนเรามีเพียง 90 นาที - เรา จะไม่สามารถครอบคลุมทุกอย่างที่ฉัน 22 00:01:14,650 --> 00:01:16,280 ชอบที่จะครอบคลุมสำหรับคุณผู้ชาย 23 00:01:16,280 --> 00:01:21,170 แต่เราจะมีตันของทรัพยากรสำหรับ คุณสามารถวาดตามที่คุณได้รับรู้ 24 00:01:21,170 --> 00:01:24,000 วัสดุและการทำงานที่ผ่าน ชุดปัญหาของคุณ 25 00:01:24,000 --> 00:01:30,810 >> เตือนความทรงจำที่ฉันมีข้อความออนไลน์ กล่องตั้งค่าสำหรับคุณในการกรอกถ้าคุณ 26 00:01:30,810 --> 00:01:33,250 มีข้อเสนอแนะสำหรับผมใด ๆ ทั้งบวกและ 27 00:01:33,250 --> 00:01:35,180 สร้างสรรค์เกี่ยวกับส่วน 28 00:01:35,180 --> 00:01:38,600 URL ที่ตั้งอยู่ทางด้านขวาลงที่นี่ 29 00:01:38,600 --> 00:01:43,250 ดังนั้นโปรดใช้เวลาสักครู่หากคุณมี ข้อเสนอแนะว่าในระหว่างส่วน 30 00:01:43,250 --> 00:01:48,030 หรือหลังหรือหลังจากที่คุณดูวิดีโอ ออนไลน์เพื่อให้ข้อเสนอแนะของคุณฉัน 31 00:01:48,030 --> 00:01:52,100 ผมขอขอบคุณที่ใด ๆ และทั้งหมดของมัน 32 00:01:52,100 --> 00:01:55,730 >> ดังนั้นผมจึงได้มีการสนทนาเล็ก ๆ ที่มีจำนวนมากของฉัน 33 00:01:55,730 --> 00:01:59,350 นักเรียนตลอดสัปดาห์ - เป็นฉันมือ กลับแบบทดสอบการพูดคุยเกี่ยวกับ 34 00:01:59,350 --> 00:02:01,480 แน่นอนเห็นว่าคุณกำลังทำ 35 00:02:01,480 --> 00:02:05,120 และรูปแบบหนึ่งได้เกิดขึ้นซ้ำแล้ว กว่าในการพูดคุยเกี่ยวกับ - ใน 36 00:02:05,120 --> 00:02:05,660 โดยเฉพาะอย่างยิ่ง - 37 00:02:05,660 --> 00:02:07,710 ชุดปัญหา 38 00:02:07,710 --> 00:02:13,090 และฉันได้โพสต์รูปแบบที่ บนกระดานได้ในขณะนี้ 39 00:02:13,090 --> 00:02:16,630 >> โดยพื้นฐานแล้วมีความแตกต่าง ระหว่างการเปลี่ยนในสิ่งที่เป็น 40 00:02:16,630 --> 00:02:19,590 ทำอย่างถูกต้องและสิ่งที่ ที่จะทำดี 41 00:02:19,590 --> 00:02:22,920 คนส่วนใหญ่ได้รับการทำที่ยอดเยี่ยม ในแง่ของความถูกต้อง - 42 00:02:22,920 --> 00:02:25,460 5 หรือ 4 ใน psets ทั้งหมด 43 00:02:25,460 --> 00:02:27,930 คนส่วนใหญ่จะได้รับ ที่ตลอดเวลา 44 00:02:27,930 --> 00:02:31,150 >> แต่เพียงเพราะคุณได้ทำ สิ่งที่ถูกต้องไม่ได้หมายความว่าคุณได้ 45 00:02:31,150 --> 00:02:34,450 ทำสิ่งที่เป็นอย่างหรูหราหรือ ได้อย่างมีประสิทธิภาพหรือเป็นเรียบร้อยตามที่คุณ 46 00:02:34,450 --> 00:02:35,270 จะได้ทำมัน 47 00:02:35,270 --> 00:02:36,790 และนั่นคือสิ่งที่การออกแบบ - 48 00:02:36,790 --> 00:02:39,230 และเลสเบี้ยนองศาสไตล์ - 49 00:02:39,230 --> 00:02:40,450 แกนสำหรับ 50 00:02:40,450 --> 00:02:45,130 ดังนั้นฉันผลักดันให้คุณทั้งหมดและ TFs อื่น ๆ จะผลักดันพวกคุณที่จะเปิดไม่เพียง แต่ 51 00:02:45,130 --> 00:02:48,320 ในสิ่งที่ถูกต้อง แต่เปิด ในสิ่งที่เขียนดี 52 00:02:48,320 --> 00:02:53,060 >> ไม่ได้ทำที่ไม่จำเป็นสำหรับลูป ไม่ได้คำนวณตัวแปรถ้า 53 00:02:53,060 --> 00:02:53,800 คุณจะได้ไม่ต้อง 54 00:02:53,800 --> 00:02:58,520 ตัวอย่างเช่นมองกลับไปที่ปัญหาการตั้งค่า 4 เมื่อวางอิฐบน 55 00:02:58,520 --> 00:03:03,070 หน้าจอทุกแถว - อิฐในทุก แถวที่กำหนดมี y เหมือนกัน - 56 00:03:03,070 --> 00:03:04,390 ความสูงเดียวกันประสานงาน 57 00:03:04,390 --> 00:03:07,930 >> เพื่อให้ y-ประสานงานไม่จำเป็นต้อง มีการคำนวณในการตกแต่งภายใน 58 00:03:07,930 --> 00:03:11,070 ซ้อนกันสำหรับวงที่คุณอาจใช้ จะนำก้อนอิฐเหล่านั้นบนหน้าจอ 59 00:03:11,070 --> 00:03:14,030 มันจะต้องมีการคำนวณทุก ทุกครั้งที่คุณเปลี่ยนแถวหรือ 60 00:03:14,030 --> 00:03:15,200 ย้ายไปลงแถว 61 00:03:15,200 --> 00:03:19,760 ดังนั้นบอกว่าถ้ามี 10 ก้อนอิฐที่อยู่ใน แถวแต่ละอิฐสามารถมีเดียวกัน 62 00:03:19,760 --> 00:03:22,260 y-ประสานงานและที่พิกัด ก็สามารถนำมาคำนวณ 63 00:03:22,260 --> 00:03:23,550 ครั้งเดียวสำหรับทุกคน 64 00:03:23,550 --> 00:03:27,810 >> มันไม่จำเป็นที่จะต้องมีการคำนวณ 10 ครั้งหรือไม่ว่าการคำนวณความต้องการ 65 00:03:27,810 --> 00:03:30,220 จะเกิดขึ้นในที่เกิดขึ้นจริง ฟังก์ชั่นการโทร - 66 00:03:30,220 --> 00:03:33,020 การเรียกใช้ฟังก์ชันใหม่ gracked 67 00:03:33,020 --> 00:03:37,820 ดังนั้นหากที่เป็นเพียงเล็กน้อยสับสนสำหรับ คุณมากขึ้นโดยทั่วไปสิ่งที่ 68 00:03:37,820 --> 00:03:40,730 ไม่จำเป็นต้องเกิดขึ้นทุกครั้งเดียว คุณไปผ่านห่วงสำหรับไม่ควรจะ 69 00:03:40,730 --> 00:03:42,900 ใส่ในห่วงสำหรับและไม่ควร เกิดขึ้นทุกครั้งที่คุณไปทุก 70 00:03:42,900 --> 00:03:44,080 ผ่านห่วงสำหรับ 71 00:03:44,080 --> 00:03:49,270 >> ตัวอย่างเช่นการออกแบบที่ดีอีกอย่างหนึ่งที่เราเห็น ในสัปดาห์ที่ 3 เป็นเวลา 15 คุณสามารถเก็บ 72 00:03:49,270 --> 00:03:50,500 ติดตามของศูนย์ 73 00:03:50,500 --> 00:03:53,600 ดังนั้นเมื่อคุณเริ่มต้นที่คณะกรรมการคุณ บันทึก - ในตัวแปรทั่วโลกอาจจะ - 74 00:03:53,600 --> 00:03:56,140 x และ y-ประสานงานของศูนย์ 75 00:03:56,140 --> 00:03:57,520 และจากนั้นเมื่อใดก็ตามที่คุณ - 76 00:03:57,520 --> 00:04:00,310 ในฟังก์ชั่นย้ายของคุณเมื่อใดก็ตามที่คุณทำ ย้ายที่ประสบความสำเร็จที่คุณปรับปรุง 77 00:04:00,310 --> 00:04:02,040 ตำแหน่งของศูนย์ 78 00:04:02,040 --> 00:04:06,240 >> ที่จะช่วยให้คุณประหยัดจากที่มีการทำ สำหรับลูปซ้อนกันมองผ่าน 79 00:04:06,240 --> 00:04:10,700 คณะกรรมการทุกครั้งในการทำงานของย้ายของคุณ และหาศูนย์หรือหากระเบื้อง 80 00:04:10,700 --> 00:04:12,460 แล้วตรวจสอบสิ่งที่ถัดไป 81 00:04:12,460 --> 00:04:16,329 แต่คุณต้องเป็นที่ตั้งของ ศูนย์คุณก็สามารถมองไปด้านล่าง 82 00:04:16,329 --> 00:04:21,160 และไปทางซ้ายและขวาของมันเพื่อหา กระเบื้องที่คุณกำลังมองหา 83 00:04:21,160 --> 00:04:24,970 >> ดังนั้นในแง่ของโปรแกรมที่เรากำลัง การเขียนก็จะไม่เคยมีขนาดใหญ่พอ 84 00:04:24,970 --> 00:04:28,580 ว่าบางส่วนของการตัดสินใจการออกแบบเหล่านี้ จะจริงจะขัดขวางคุณ 85 00:04:28,580 --> 00:04:31,670 โปรแกรมหรือทำให้มันทำงานช้ากว่า หรือบางทีก็วิ่งออกมาจากหน่วยความจำ 86 00:04:31,670 --> 00:04:35,030 แต่เราก็ยังคงผลักดันให้คุณผู้ชาย ที่จะเขียนเป็นสง่างามและ 87 00:04:35,030 --> 00:04:36,450 รหัสที่มีประสิทธิภาพที่สุด 88 00:04:36,450 --> 00:04:39,910 >> ดังนั้นถ้าคุณทำท้ายการเขียนสิ่งที่ ที่มีขนาดใหญ่อย่างมีนัยสำคัญ 89 00:04:39,910 --> 00:04:44,660 ขอบเขตที่พวกเขาจะได้รับการเขียนด้วยดี การออกแบบที่นอกจากจะเป็นที่ถูกต้อง 90 00:04:44,660 --> 00:04:46,300 ดังนั้นจำนวนของคุณมี ที่นำออกมา 91 00:04:46,300 --> 00:04:48,560 นั่นคือสิ่งที่เรากำลังมองหา - สิ่งที่เรากำลังจะดำเนินการต่อไป 92 00:04:48,560 --> 00:04:49,840 ผลักดันให้พวกคุณใน 93 00:04:49,840 --> 00:04:52,460 >> หากคุณเคยมีคำถามใด ๆ เกี่ยวกับ การออกแบบของโปรแกรมของคุณรู้สึกฟรี 94 00:04:52,460 --> 00:04:56,870 ถึงออกมาให้ฉันและฉันมีความสุขที่จะ เดินผ่านโปรแกรมของคุณกับคุณ 95 00:04:56,870 --> 00:05:01,320 และชี้ให้เห็นบางส่วนของการออกแบบ การตัดสินใจที่คุณทำและให้บางส่วน 96 00:05:01,320 --> 00:05:06,240 คำแนะนำเกี่ยวกับวิธีการที่จะทำให้ได้ การตัดสินใจการออกแบบที่ดีขึ้น 97 00:05:06,240 --> 00:05:08,870 >> ดังนั้นเรากำลังจะย้ายไป ที่จะพูดคุยเกี่ยวกับการทดสอบ 0 98 00:05:08,870 --> 00:05:11,300 ก่อนที่เราจะทำอย่างไรที่ไม่ใคร มีคำถามใด ๆ เกี่ยวกับสิ่งที่ 99 00:05:11,300 --> 00:05:14,252 ฉันได้รับการคุ้มครองเพื่อให้ห่างไกล 100 00:05:14,252 --> 00:05:21,500 >> [พึมพำเสียง] 101 00:05:21,500 --> 00:05:22,750 >> เจสัน Hirschhorn: เจ็ดวินาที 102 00:05:22,750 --> 00:05:23,250 ตกลง 103 00:05:23,250 --> 00:05:24,970 ขอพูดคุยเกี่ยวกับการทดสอบ 0 สำหรับบิต 104 00:05:24,970 --> 00:05:26,700 ส่วนใหญ่ของคุณมีแบบทดสอบของคุณ 0 กลับ 105 00:05:26,700 --> 00:05:29,820 หากคุณไม่ได้หวังว่า คุณจำได้เล็กน้อย 106 00:05:29,820 --> 00:05:34,770 แต่ถ้าคุณได้รับการทดสอบ 0 แล้วคุณ นอกจากนี้ยังมีการเข้าถึงแบบออนไลน์ 107 00:05:34,770 --> 00:05:35,890 ตัวอย่างการแก้ปัญหา 108 00:05:35,890 --> 00:05:39,480 >> ไม่มีใครมีคำถามใด ๆ ก่อนที่จะ เรากระโดดลงไปในวัสดุสัปดาห์เกี่ยวกับ 109 00:05:39,480 --> 00:05:41,520 ปัญหาโดยเฉพาะอย่างยิ่งในการทดสอบ 0 - 110 00:05:41,520 --> 00:05:44,630 ทำไมคำตอบคือว่ามันคืออะไร 111 00:05:44,630 --> 00:05:47,255 เป็นใครสับสนเกี่ยวกับอะไร 112 00:05:47,255 --> 00:05:50,230 แม้ว่าคุณจะมีปัญหาที่ถูกต้อง แต่ เพียงแค่ต้องการให้ฉันอธิบายมันเล็กน้อย 113 00:05:50,230 --> 00:05:52,640 มากขึ้นผมมีความสุขที่จะทำในขณะนี้ 114 00:05:52,640 --> 00:05:57,800 >> ดังนั้นผมจึงได้ถามพวกคุณไป มาพร้อมกับบาง 115 00:05:57,800 --> 00:05:59,440 ความคิดเกี่ยวกับการทดสอบ 0 116 00:05:59,440 --> 00:06:02,660 ดังนั้นผู้ที่ต้องการจะได้รับเรา เริ่มต้นด้วยคำถามหรือ 117 00:06:02,660 --> 00:06:04,655 แสดงความคิดเห็นเกี่ยวกับการทดสอบ 0? 118 00:06:04,655 --> 00:06:07,435 119 00:06:07,435 --> 00:06:10,410 >> [กระดาษ RUSTLING] 120 00:06:10,410 --> 00:06:11,470 >> เจสัน Hirschhorn: ยังไม่ได้ทุกคน ได้อย่างสมบูรณ์แบบ 121 00:06:11,470 --> 00:06:12,720 ดังนั้นฉันรู้ว่า [หัวเราะ] 122 00:06:12,720 --> 00:06:15,950 จะต้องมีคำถามบางอย่าง เกี่ยวกับแบบทดสอบ 0 123 00:06:15,950 --> 00:06:27,940 124 00:06:27,940 --> 00:06:28,590 ตกลง 125 00:06:28,590 --> 00:06:29,210 ใช่ 126 00:06:29,210 --> 00:06:29,600 Ompica 127 00:06:29,600 --> 00:06:30,520 >> OMPICA: หมายเลข 10 128 00:06:30,520 --> 00:06:33,560 >> เจสัน Hirschhorn: หมายเลข 10 129 00:06:33,560 --> 00:06:35,400 ซึ่งเป็นหนึ่งในจำนวน 10? 130 00:06:35,400 --> 00:06:35,840 >> OMPICA: - 131 00:06:35,840 --> 00:06:36,420 >> เจสัน Hirschhorn: ฉัน haven't - 132 00:06:36,420 --> 00:06:37,670 >> OMPICA: รวม - 133 00:06:37,670 --> 00:06:40,060 134 00:06:40,060 --> 00:06:42,180 >> เจสัน Hirschhorn: จำนวน 10 แปด กับฉัน - เขียนแปดถึงฉัน? 135 00:06:42,180 --> 00:06:42,980 >> OMPICA: ใช่ 136 00:06:42,980 --> 00:06:43,630 >> เจสัน Hirschhorn: OK 137 00:06:43,630 --> 00:06:47,390 ดังนั้นคำถามอื่นคุณอาจมี ขอเป็นฉันทิพยเนตร? 138 00:06:47,390 --> 00:06:48,630 คำตอบคือใช่ 139 00:06:48,630 --> 00:06:52,060 ในส่วนก่อนที่จะตอบคำถามที่ฉันถาม พวกคุณทั้งรหัสและสเตอร์ลิง 140 00:06:52,060 --> 00:06:52,980 แปดถึงฉัน 141 00:06:52,980 --> 00:06:54,770 ทั้งสองของพวกเขาที่เกิดขึ้นกับ ปรากฏในการตอบคำถาม 142 00:06:54,770 --> 00:06:57,510 ดังนั้นหวังว่าที่คุณจ่าย ความสนใจไปที่ 143 00:06:57,510 --> 00:07:02,520 >> และถ้าคุณได้แล้วคุณจะต้อง อาจจะทำได้ดีกับทั้งสอง 144 00:07:02,520 --> 00:07:06,030 แต่แปดถึง i, เราไม่ได้รหัสจริง ในชั้นเรียน แต่มันก็เป็นอีกครั้ง 145 00:07:06,030 --> 00:07:07,500 ถามเกี่ยวกับการตอบคำถาม 146 00:07:07,500 --> 00:07:13,270 ดังนั้นสองสิ่งที่จะใช้ ทราบเมื่อการเข้ารหัสแปดถึงฉัน 147 00:07:13,270 --> 00:07:17,320 สิ่งแรกที่ต่อคำถามที่เป็น ที่คุณจำเป็นต้องตรวจสอบว่าสตริง 148 00:07:17,320 --> 00:07:20,300 เท่ากับโมฆะ 149 00:07:20,300 --> 00:07:28,060 >> สองสามคนพยายามที่จะตรวจสอบในภายหลัง ในโปรแกรมนี้ถ้าวงเล็บผม - 150 00:07:28,060 --> 00:07:30,940 เพื่อให้ตัวละครที่เฉพาะเจาะจงในการที่ สตริง - เท่ากับโมฆะ 151 00:07:30,940 --> 00:07:35,600 แต่จำไว้ null ที่เป็นหลัก - มันเป็นเรื่องดีที่จะคิด 152 00:07:35,600 --> 00:07:39,100 null เป็นตัวชี้ศูนย์ - ตัวชี้ไปยังศูนย์ - 153 00:07:39,100 --> 00:07:40,920 บางแห่งในหน่วยความจำที่ คุณจะไม่สามารถเข้าถึง 154 00:07:40,920 --> 00:07:44,730 >> ดังนั้นหากสิ่งที่มีค่าเท่ากับโมฆะคุณ รู้ว่ามันยังไม่ได้รับการเริ่มต้น 155 00:07:44,730 --> 00:07:46,430 หรือมีอะไรที่มี 156 00:07:46,430 --> 00:07:50,950 ดังนั้นคือดาวถ่าน, s ฉันวงเล็บเป็นถ่าน 157 00:07:50,950 --> 00:07:57,410 ดังนั้นมันทำให้รู้สึกที่จะเปรียบเทียบเพื่อโมฆะ, แต่ไม่ s วงเล็บฉันเป็นโมฆะ 158 00:07:57,410 --> 00:07:59,390 แต่อีกครั้ง - เพื่อให้เป็นสิ่งแรกที่ ที่คุณควรจะทำ - 159 00:07:59,390 --> 00:08:03,510 ตรวจสอบให้แน่ใจว่าคุณจริง มีสตริงจริง 160 00:08:03,510 --> 00:08:08,020 >> ถัดไปคุณต้องการที่จะไปผ่าน ตัวละครในแต่ละสาย 161 00:08:08,020 --> 00:08:12,500 และเพื่อที่จะเป็นเช่น s วงเล็บ ผมยกตัวอย่างเช่นถ้าฉันเป็นซ้ำของคุณ 162 00:08:12,500 --> 00:08:17,250 และใช้ตัวอักษรที่และ ได้รับค่าที่แท้จริงของมัน 163 00:08:17,250 --> 00:08:21,800 ที่คุณได้เก็บไว้เป็นถ่าน แต่ ค่า ASCII ศูนย์ - 164 00:08:21,800 --> 00:08:23,010 ศูนย์เป็นตัวละคร - 165 00:08:23,010 --> 00:08:25,450 ไม่จริงเลขศูนย์ 166 00:08:25,450 --> 00:08:28,700 มันเป็นบางอย่างที่หมายเลขอื่น ๆ ที่คุณสามารถ มองขึ้นไปในตาราง ASCII 167 00:08:28,700 --> 00:08:30,790 >> ดังนั้นวิธีหนึ่งที่จะแก้ไขให้ถูกต้องสำหรับการที่ - น่าจะเป็นวิธีที่ดีที่สุดที่จะถูกต้องสำหรับ 168 00:08:30,790 --> 00:08:33,760 ว่า - จะถูกลบออกจากมัน ค่าตัวละคร - 169 00:08:33,760 --> 00:08:35,140 ศูนย์เป็นตัวอักษร 170 00:08:35,140 --> 00:08:38,490 คำพูดเดียวเพื่อลบเป็นศูนย์ อีกคำพูดเดียว 171 00:08:38,490 --> 00:08:44,620 ที่จะนำสิ่งที่หมายเลขที่คุณมี เป็นถ่าน, และได้รับมันเท่ากับ 172 00:08:44,620 --> 00:08:46,720 จำนวนเป็นจำนวนเต็มที่เกิดขึ้นจริง 173 00:08:46,720 --> 00:08:50,300 >> และที่คล้ายกันมากกับวิธีการ ผู้คนจำนวนมากเข้ามาใน 174 00:08:50,300 --> 00:08:52,800 ปัญหาชุดที่ 2 กับซีซาร์ และ Viginere - 175 00:08:52,800 --> 00:08:55,160 ยันต์เหล่านั้นเมื่อคุณ ถูกหมุนได้ 176 00:08:55,160 --> 00:08:59,210 ดังนั้นหลังจากที่คุณมีเป็นจำนวนจาก ศูนย์ถึงเก้าแล้ว - ขึ้นอยู่กับ 177 00:08:59,210 --> 00:09:02,750 ที่จะไปในจำนวนที่สูงสุด - คุณจำเป็นต้องคูณ 178 00:09:02,750 --> 00:09:04,120 โดยอำนาจของ 10 179 00:09:04,120 --> 00:09:07,340 >> บางคนเดินออกมาจากด้านหลังเพื่อ ด้านหน้าและคูณแต่ละบุคคล 180 00:09:07,340 --> 00:09:08,940 จำนวนโดยอำนาจของ 10 181 00:09:08,940 --> 00:09:11,160 บางคนย้ายจาก ด้านหน้าไปด้านหลัง - 182 00:09:11,160 --> 00:09:14,430 และเพื่อให้เกิดสูงสุด สั่งซื้อหมายเลขแรก - 183 00:09:14,430 --> 00:09:18,190 และจะช่วยผู้ที่อยู่ใน ตัวแปรเคาน์เตอร์ทั่วโลก 184 00:09:18,190 --> 00:09:20,880 แล้วแต่ละครั้งที่ผ่านการ วงคูณยักษ์ที่ทั่วโลก 185 00:09:20,880 --> 00:09:25,640 ตอบโต้ด้วย 10 ตัวแปรที่จะทำให้ พื้นที่สำหรับถ่านต่อไป 186 00:09:25,640 --> 00:09:28,750 >> เพื่อให้เป็นสับสนเล็กน้อยโดยไม่ต้อง ฉันเขียนมันขึ้นมาบนเรือ 187 00:09:28,750 --> 00:09:31,550 แต่สารละลายตัวอย่าง มีให้คุณ 188 00:09:31,550 --> 00:09:32,870 แต่สิ่งที่มีขนาดใหญ่ เรากำลังมองหา 189 00:09:32,870 --> 00:09:36,400 นอกจากนี้ยังมีการตรวจสอบเพื่อให้แน่ใจว่าแต่ละ ตัวบุคคลได้แน่นอน 190 00:09:36,400 --> 00:09:39,780 ตัวละครระหว่างศูนย์และเก้าและไม่ บางตัวละครอื่น ๆ เช่น, 191 00:09:39,780 --> 00:09:41,160 เช่น 192 00:09:41,160 --> 00:09:43,150 >> สิ่งเหล่านี้เป็นสิ่งที่เรากำลังมองหา ในคำถามที่ 193 00:09:43,150 --> 00:09:46,510 194 00:09:46,510 --> 00:09:47,980 ไม่ว่าจะตอบคำถามของคุณหรือไม่ 195 00:09:47,980 --> 00:09:49,320 >> OMPICA: ใช่ 196 00:09:49,320 --> 00:09:50,240 >> เจสัน Hirschhorn: OK 197 00:09:50,240 --> 00:09:53,940 มีคำถามอื่น ๆ เกี่ยวกับแบบทดสอบ 0? 198 00:09:53,940 --> 00:09:55,440 สิ่งที่เกี่ยวกับการรวบรวม? 199 00:09:55,440 --> 00:09:56,740 ทุกคนรวบรวมใช่ไหม 200 00:09:56,740 --> 00:09:58,370 เลขที่ 201 00:09:58,370 --> 00:09:58,840 มี - 202 00:09:58,840 --> 00:10:01,010 [หัวเราะ] 203 00:10:01,010 --> 00:10:03,265 คำถามใด ๆ เกี่ยวกับ การรวบรวม? 204 00:10:03,265 --> 00:10:06,050 205 00:10:06,050 --> 00:10:06,966 ว้าว 206 00:10:06,966 --> 00:10:11,090 >> [กระดาษ RUSTLING] 207 00:10:11,090 --> 00:10:11,520 >> เจสัน Hirschhorn: ใช่ 208 00:10:11,520 --> 00:10:11,700 ไมเคิล 209 00:10:11,700 --> 00:10:14,140 >> MICHAEL สินค้าจำนวน 7 - สุ่ม 210 00:10:14,140 --> 00:10:16,500 >> เจสัน Hirschhorn: หมายเลข 7 211 00:10:16,500 --> 00:10:20,670 จำนวน 7 เป็นจำนวนเต็มได้รับการสุ่ม 212 00:10:20,670 --> 00:10:21,110 ยอดเยี่ยม 213 00:10:21,110 --> 00:10:25,630 ดังนั้นคุณจะได้รับจำนวนเต็มและ จำนวนเต็ม b และคุณต้องการสุ่ม 214 00:10:25,630 --> 00:10:28,710 จำนวนเต็มระหว่าง a และ b 215 00:10:28,710 --> 00:10:31,740 จริงเราสามารถเขียนหนึ่งนี้ กระดานเพราะคนนี้ 216 00:10:31,740 --> 00:10:33,320 เป็นหนึ่งบรรทัดของรหัส - 217 00:10:33,320 --> 00:10:34,390 วิธีหนึ่งที่จะทำมัน 218 00:10:34,390 --> 00:10:37,810 >> ดังนั้นเราจึงกำลังได้รับ Drand เป็น ทำงานเราสามารถใช้ 219 00:10:37,810 --> 00:10:38,820 และสิ่งที่ไม่ Drand - 220 00:10:38,820 --> 00:10:40,290 สมมติว่ามันถูกเมล็ด - 221 00:10:40,290 --> 00:10:42,316 สิ่งที่ไม่ Drand กลับ? 222 00:10:42,316 --> 00:10:44,840 >> MICHAEL: ลอยระหว่าง 0.0 และ 1.0 223 00:10:44,840 --> 00:10:45,530 >> เจสัน Hirschhorn: จำนวน - ใช่ 224 00:10:45,530 --> 00:10:47,910 จำนวนระหว่าง 0 และ 1 225 00:10:47,910 --> 00:10:51,760 และเพื่อให้เรามี b และ 226 00:10:51,760 --> 00:10:55,480 และแล้วเราก็มีจำนวนสุ่มของเรา ระหว่าง 0 และ 1 ให้กับเราโดย Drand 227 00:10:55,480 --> 00:11:01,480 228 00:11:01,480 --> 00:11:06,630 บางคนพยายามที่จะนำ b หรือ b ลบ หรือสิ่งที่อยู่ข้างในนั้น 229 00:11:06,630 --> 00:11:07,960 วงเล็บ 230 00:11:07,960 --> 00:11:11,210 นั่นก็หมายความว่าพวกเขากำลัง ข้อโต้แย้งที่ฟังก์ชั่นนี้ 231 00:11:11,210 --> 00:11:13,450 >> Drand ไม่ใช้ข้อโต้แย้งใด ๆ - เช่น getString ไม่ 232 00:11:13,450 --> 00:11:14,330 ไม่ใช้ข้อโต้แย้งใด ๆ 233 00:11:14,330 --> 00:11:16,600 จึงเป็นเพียงวงเล็บเปิดปิด paren - และที่ตัวเองเป็น 234 00:11:16,600 --> 00:11:17,330 การเรียกใช้ฟังก์ชัน 235 00:11:17,330 --> 00:11:19,770 และที่จะช่วยให้คุณเป็นจำนวนมาก ระหว่าง 0 และ 1 236 00:11:19,770 --> 00:11:22,820 แน่นอนเรามีทั้งช่วง ว่าตัวเลขอาจจะค่ะ 237 00:11:22,820 --> 00:11:28,470 >> พูดว่าถ้า b คือ 10 และ 5 เป็นเราจริงๆ ต้องการตัวเลขที่มีช่วงของ 5 238 00:11:28,470 --> 00:11:36,940 ดังนั้นสิ่งต่อไปที่เราต้องทำคือ คูณนี้โดยช่วง b ลบ 239 00:11:36,940 --> 00:11:40,380 ดังนั้นสมมติว่ามีการคูณ 240 00:11:40,380 --> 00:11:42,590 และที่จะให้เราเป็นจำนวนมาก ภายในช่วงที่กำหนด 241 00:11:42,590 --> 00:11:46,610 และช่วงที่ระบุว่าเป็น ความแตกต่างระหว่าง b ลบ 242 00:11:46,610 --> 00:11:50,030 >> และสุดท้ายเท่านั้นที่จะให้มันจาก - กล่าวว่าช่วงระหว่าง b ลบ 243 00:11:50,030 --> 00:11:52,520 ที่ 5 ที่จะให้เรา จำนวน 0-5 244 00:11:52,520 --> 00:11:56,000 แต่ถ้าในความเป็นจริง 5 เราต้องเพิ่ม ช่วงนี้ขึ้นเพื่อที่จะเป็น 245 00:11:56,000 --> 00:12:01,380 ควรจะเป็นจริงโดยการเพิ่ม 246 00:12:01,380 --> 00:12:02,580 เพื่อให้ได้รับสิทธิในตรรกะ 247 00:12:02,580 --> 00:12:03,745 แล้วคุณจะมี คำถามอื่นได้หรือไม่ 248 00:12:03,745 --> 00:12:04,547 >> ไมเคิล: เลขที่ 249 00:12:04,547 --> 00:12:06,010 ฉันเพียงแค่รู้สึกโง่จริงๆตอนนี้ 250 00:12:06,010 --> 00:12:06,405 [หัวเราะ] 251 00:12:06,405 --> 00:12:06,730 >> เจสัน Hirschhorn: เลขที่ 252 00:12:06,730 --> 00:12:08,640 ไม่รู้สึกโง่จริงๆ 253 00:12:08,640 --> 00:12:10,560 จำนวนของคนที่ต่อสู้ ด้วยคำถามนี้ 254 00:12:10,560 --> 00:12:13,920 แล้วคำถามอื่น ๆ คือ Drand, ที่คุณกล่าวว่าจะช่วยให้คุณลอย - 255 00:12:13,920 --> 00:12:14,940 กลับลอย 256 00:12:14,940 --> 00:12:18,020 แต่ฟังก์ชั่นนี้ถามจริง เพื่อจำนวนเต็มจะถูกส่งกลับ 257 00:12:18,020 --> 00:12:23,700 >> คุณไม่จำเป็นต้องที่จะโยนนี้อย่างชัดเจน เป็นจำนวนเต็มเพราะสิ่งเหล่านี้ 258 00:12:23,700 --> 00:12:29,090 การดำเนินงานที่จะรักษามันเป็นทั้งหมด ลอย - เป็นจำนวนจุดลอย 259 00:12:29,090 --> 00:12:31,570 เช่นนี้จะ - แม้ว่านี้ เป็นจำนวนเต็มนี้จะ 260 00:12:31,570 --> 00:12:32,890 จะคูณได้อย่างถูกต้อง 261 00:12:32,890 --> 00:12:34,000 ทั้งหมดคูณจะทำงาน 262 00:12:34,000 --> 00:12:35,060 คุณไม่จำเป็นต้องที่จะโยนมันที่นี่ 263 00:12:35,060 --> 00:12:36,480 ในความเป็นจริงคุณไม่ควรโยน 264 00:12:36,480 --> 00:12:37,310 >> ที่จะ - 265 00:12:37,310 --> 00:12:40,750 ถ้าคุณจะโยนจำนวน ที่ระหว่าง 0 และ 1 - 266 00:12:40,750 --> 00:12:42,680 จำนวนสุ่มลอยจุด - 267 00:12:42,680 --> 00:12:47,850 แล้วมันอาจจะเป็นเพียง 0 หรือ 1 ดังนั้น คุณจะสูญเสียทั้งหมดของความแม่นยำที่ 268 00:12:47,850 --> 00:12:50,120 แต่ในท้ายที่สุดเมื่อคุณกลับมา จะได้รับโดยอัตโนมัติ 269 00:12:50,120 --> 00:12:51,620 ส่งกลับเป็นจำนวนเต็ม 270 00:12:51,620 --> 00:12:56,870 ดังนั้นคุณจึงไม่จำเป็นต้องทำ ว่าตัวเองหล่อ 271 00:12:56,870 --> 00:13:00,810 >> ดังนั้นนี่คือคำตอบ คำถามที่ 7 จำนวน 272 00:13:00,810 --> 00:13:02,190 คำถามใด ๆ ที่อื่น ๆ ในแบบทดสอบ 0? 273 00:13:02,190 --> 00:13:03,300 ใช่แอนนี่ 274 00:13:03,300 --> 00:13:05,050 >> ANNIE: เมื่อไหร่ที่เราใช้ซ้ำ - 275 00:13:05,050 --> 00:13:07,850 เมื่อใดที่เราใช้ลูปซ้ำ? 276 00:13:07,850 --> 00:13:10,210 >> เจสัน Hirschhorn: คุณจะใช้เมื่อ ซ้ำ - เพื่อให้มากกว่าปกติ 277 00:13:10,210 --> 00:13:14,110 ข้อดีและข้อเสียของการเรียกซ้ำเมื่อเทียบกับ วิธีการทบทวน 278 00:13:14,110 --> 00:13:17,110 ใครสามารถนำเสนอโปรหรือแย้งหรือไม่ 279 00:13:17,110 --> 00:13:19,460 กรุณา? 280 00:13:19,460 --> 00:13:20,140 ไม่สามารถทุกคน 281 00:13:20,140 --> 00:13:22,526 ที่สามารถนำเสนอโปรหรือแย้งหรือไม่ 282 00:13:22,526 --> 00:13:26,963 >> [กระดาษ RUSTLING] 283 00:13:26,963 --> 00:13:29,730 >> นักเรียน 1: ซ้ำน้อย การเข้ารหัส - การพิมพ์น้อยลงหรือไม่ 284 00:13:29,730 --> 00:13:33,170 >> เจสัน Hirschhorn: ดังนั้นโดยทั่วไป เรียกซ้ำโดยเฉพาะอย่างยิ่งการทำงาน - 285 00:13:33,170 --> 00:13:35,750 หรือขั้นตอนวิธีการเช่นผสาน จัดเรียง - ที่ยืมตัวเอง 286 00:13:35,750 --> 00:13:37,300 ที่จะใช้วิธีการซ้ำ - 287 00:13:37,300 --> 00:13:40,710 อาจจะตรงไปตรงมามากขึ้น รหัสซ้ำ 288 00:13:40,710 --> 00:13:43,940 และเพียงแค่ทำให้รู้สึกมากขึ้น ที่จะทำซ้ำ 289 00:13:43,940 --> 00:13:46,230 เพื่อที่จะเป็นมืออาชีพในการเรียกซ้ำ 290 00:13:46,230 --> 00:13:46,610 คนอื่นอย่างไร 291 00:13:46,610 --> 00:13:47,467 ใช่? 292 00:13:47,467 --> 00:13:49,240 >> นักเรียนที่ 2: การเรียกซ้ำ Con - 293 00:13:49,240 --> 00:13:50,940 จะใช้หน่วยความจำเพิ่มเติม 294 00:13:50,940 --> 00:13:52,200 >> เจสัน Hirschhorn: ดังนั้นตรงขวา 295 00:13:52,200 --> 00:13:55,720 ฟังก์ชั่นซ้ำจะเก็บเพิ่ม กองเฟรมไปยังกอง 296 00:13:55,720 --> 00:13:59,690 ดังนั้นถ้าคุณกำลังปฏิบัติการในหลาย ตัวเลขและมีการเรียกนี้ 297 00:13:59,690 --> 00:14:02,560 ทำงานมากแล้วคุณจะได้อย่างแน่นอน ใช้หน่วยความจำมากขึ้นในขณะที่ 298 00:14:02,560 --> 00:14:05,810 วิธีการทบทวนที่จะทำให้หนึ่ง กองกรอบในกองเพราะ 299 00:14:05,810 --> 00:14:08,420 มันทั้งหมดที่เกิดขึ้นภายในหนึ่งฟังก์ชัน 300 00:14:08,420 --> 00:14:11,010 >> ๆ ข้อดีและข้อเสียอื่น ๆ 301 00:14:11,010 --> 00:14:11,500 ใช่ 302 00:14:11,500 --> 00:14:12,550 >> นักเรียน 3: ข้อดีในการเรียกซ้ำ 303 00:14:12,550 --> 00:14:15,950 คุณไม่ได้มีการตรวจสอบใน ล่วงหน้ากี่ครั้ง 304 00:14:15,950 --> 00:14:17,660 มีรหัสที่จะทำซ้ำ 305 00:14:17,660 --> 00:14:22,810 คุณสามารถมีจำนวนที่กำหนดไว้ของ เวลาที่คุณต้องย้ำแล้ว 306 00:14:22,810 --> 00:14:26,420 เรียกซ้ำตัวเองจะดีกว่าเพราะ มันต้องใช้ผลที่ 307 00:14:26,420 --> 00:14:27,780 >> เจสัน Hirschhorn: ผมคิดว่าเป็นความจริง 308 00:14:27,780 --> 00:14:30,770 แต่ผมคิดว่าในทั้งสองกรณี ที่คุณจะไม่เคย - 309 00:14:30,770 --> 00:14:33,290 คุณอาจจะได้รับบาง ข้อมูลจากผู้ใช้ 310 00:14:33,290 --> 00:14:35,990 หรือฟังก์ชั่นนี้จะมีข้อมูลบางส่วน ที่จะตรวจสอบกี่ครั้งก็ 311 00:14:35,990 --> 00:14:36,730 ควรใช้ 312 00:14:36,730 --> 00:14:39,520 ดังนั้นโดยทั่วไปคุณจะไม่ยากรหัส - แม้จะอยู่ในวิธีการซ้ำ - วิธี 313 00:14:39,520 --> 00:14:40,940 หลายต่อหลายครั้งวงที่ควรจะทำงาน 314 00:14:40,940 --> 00:14:46,100 315 00:14:46,100 --> 00:14:48,670 >> คุณมีอีกคุณ คิดเกี่ยวกับแอนนี่? 316 00:14:48,670 --> 00:14:49,330 ตกลง 317 00:14:49,330 --> 00:14:51,650 ดังนั้นผู้ที่อาจจะสอง - 318 00:14:51,650 --> 00:14:54,370 โปรที่ใหญ่ที่สุดและใหญ่ที่สุด con ที่จะซ้ำเมื่อเทียบกับ 319 00:14:54,370 --> 00:14:57,080 วิธีการทบทวน 320 00:14:57,080 --> 00:14:57,690 ตกลง 321 00:14:57,690 --> 00:14:59,465 สิ่งอื่นในแบบทดสอบ 0? 322 00:14:59,465 --> 00:15:08,940 323 00:15:08,940 --> 00:15:09,920 >> ขอย้ายไปอยู่กับ 324 00:15:09,920 --> 00:15:15,260 ไฟล์ I / O นอกจากนี้ที่ยอดเยี่ยมในระยะสั้น ในสัปดาห์นี้ในไฟล์ I / O ที่หวัง 325 00:15:15,260 --> 00:15:19,270 คุณได้ดูหลาย ครั้งและชื่นชม 326 00:15:19,270 --> 00:15:22,910 ทำงานมากเดินเข้าไปในนั้นและฉัน ได้ยินจะเป็นประโยชน์อย่างบ้าคลั่ง 327 00:15:22,910 --> 00:15:25,740 ฉันยังรวมถึงการเชื่อมโยงบนภาพนิ่งนี้ ในกรณีที่คุณไม่ได้มี 328 00:15:25,740 --> 00:15:29,160 โอกาสที่จะดูมัน 10 ครั้ง 329 00:15:29,160 --> 00:15:35,280 >> ดังนั้นเราจะสั้นไปกว่า ขั้นตอนที่สำคัญในการเปิดและการทำงาน 330 00:15:35,280 --> 00:15:38,400 กับไฟล์และจากนั้นเราจะไป ดำน้ำในปัญหาการเข้ารหัสก่อน 331 00:15:38,400 --> 00:15:40,400 การตรวจสอบปัญหาที่กำหนด 332 00:15:40,400 --> 00:15:44,330 ดังนั้นอีกครั้งฉันจะใส่นี้ขึ้นอยู่กับ หน้าจอ แต่ฉันจะพูดคุย 333 00:15:44,330 --> 00:15:47,630 เพียงแค่นาทีเกี่ยวกับสิ่งที่เรากำลัง ทำที่นี่กับแฟ้ม I/O-- 334 00:15:47,630 --> 00:15:49,090 สิ่งที่หมายความว่าอย่างไร 335 00:15:49,090 --> 00:15:55,280 >> นั่นหมายความว่าเราสามารถสร้างของเรา โปรแกรมแล้วมีโปรแกรมของเรา 336 00:15:55,280 --> 00:16:00,370 ออกและไม่ได้ทำให้ผลกระทบใด ๆ โลกภายนอกของโปรแกรมของเรา 337 00:16:00,370 --> 00:16:04,630 แต่เมื่อเราเริ่มต้นการทำงานกับไฟล์ - ทั้งพวกเขาในการอ่านและการสร้าง 338 00:16:04,630 --> 00:16:10,460 พวกเขา - เราสามารถมีผลกระทบต่อบางส่วน โลกภายนอกของโปรแกรมของเรา 339 00:16:10,460 --> 00:16:15,440 >> เช่นเดียวกับถ้า Microsoft Word ไม่สามารถ เพื่อให้เอกสารใด ๆ Word, แล้ว 340 00:16:15,440 --> 00:16:18,710 เมื่อ Microsoft Word ออกทั้งหมดของคุณ การทำงานจะได้รับหายไปและมันจะ 341 00:16:18,710 --> 00:16:19,740 จริงๆจะไร้ประโยชน์ 342 00:16:19,740 --> 00:16:23,620 ในที่สุดเราไม่ต้องการที่จะสามารถที่จะ เขียนโปรแกรมที่สามารถส่งผลกระทบต่อ 343 00:16:23,620 --> 00:16:31,350 โลกรอบตัวพวกเขาทั้งสองโดยการใน ปัจจัยการผลิตที่ซับซ้อน - ในแง่ของไฟล์และ 344 00:16:31,350 --> 00:16:37,080 ผ่านไฟล์และยังมีการสร้างที่น่าสนใจ และผลที่น่าสนใจ - 345 00:16:37,080 --> 00:16:39,520 ในแง่ของชนิดของไฟล์ 346 00:16:39,520 --> 00:16:43,730 >> ดังนั้นนั่นคือเหตุผลที่เราจะเริ่มต้นที่จะ เรียนรู้วิธีการทำงานกับไฟล์ 347 00:16:43,730 --> 00:16:47,080 โดยเฉพาะอย่างยิ่งสิ่งที่ เราจะเป็นดังนี้ 348 00:16:47,080 --> 00:16:47,680 มันง่ายมาก 349 00:16:47,680 --> 00:16:51,530 มีเพียงไม่กี่ขั้นตอนและ พวกเขาจะอยู่ที่นี่ในรหัสนี้ 350 00:16:51,530 --> 00:16:55,130 ดังนั้นเรากำลังจะผ่านไป สายรหัสนี้โดยสาย 351 00:16:55,130 --> 00:16:57,630 >> ครั้งแรกที่คุณจะเห็นไฮไลต์ - 352 00:16:57,630 --> 00:17:01,330 เมื่อคุณกำลังทำงานกับไฟล์ โดยไม่คำนึงถึงชนิดของไฟล์เป็น 353 00:17:01,330 --> 00:17:02,670 คุณต้องการที่จะเปิดมัน 354 00:17:02,670 --> 00:17:05,130 และที่มีการเรียกร้องไปยัง fopen - 355 00:17:05,130 --> 00:17:05,950 ขวาที่นี่ 356 00:17:05,950 --> 00:17:07,980 คุณรวมถึงชื่อของไฟล์ 357 00:17:07,980 --> 00:17:11,930 ถ้าแฟ้มไม่ได้อยู่ในไดเรกทอรีของคุณ หรือโฟลเดอร์ที่โปรแกรมนี้ 358 00:17:11,930 --> 00:17:15,910 ชีวิตแล้วคุณยังต้องรวมถึง เส้นทางไปที่ไฟล์ที่เป็น 359 00:17:15,910 --> 00:17:19,099 >> เรากำลังจะไปคิดว่านี้ ไฟล์ที่เรียกว่า "text.txt" - 360 00:17:19,099 --> 00:17:24,220 เอกสารข้อความง่าย - อยู่ใน โฟลเดอร์เดียวกันกับโปรแกรมนี้ 361 00:17:24,220 --> 00:17:26,859 เพื่อให้เป็นสิ่งที่จะต้องเก็บไว้ในที่อื่น ใจ - ว่าถ้าคุณต้องการที่จะเปิดไฟล์ 362 00:17:26,859 --> 00:17:30,050 ที่อื่นที่คุณต้องการจริง รวมถึงทำเลที่ตั้ง 363 00:17:30,050 --> 00:17:33,520 >> ประการที่สองคุณสามารถส่งผ่านอาร์กิวเมนต์ไป fopen และนั่นคือสิ่งที่คุณต้องการจะทำ 364 00:17:33,520 --> 00:17:34,620 พร้อมกับแฟ้ม 365 00:17:34,620 --> 00:17:38,450 มีสามข้อโต้แย้งหลักที่มี คุณกำลังจะส่งผ่านไปยัง fopen 366 00:17:38,450 --> 00:17:40,060 ที่สามารถให้ฉันที่สาม 367 00:17:40,060 --> 00:17:44,960 368 00:17:44,960 --> 00:17:47,130 ที่สามารถให้ฉันหนึ่งของพวกเขา 369 00:17:47,130 --> 00:17:48,130 ใช่ 370 00:17:48,130 --> 00:17:50,010 >> นักเรียน 4: ชื่อไฟล์? 371 00:17:50,010 --> 00:17:50,440 >> เจสัน Hirschhorn: ขออภัย 372 00:17:50,440 --> 00:17:55,490 สามข้อโต้แย้งหลักที่คุณสามารถส่งผ่าน เป็นอาร์กิวเมนต์ที่สองจะ fopen 373 00:17:55,490 --> 00:17:57,060 คุณขวา - ชื่อไฟล์ เป็นอาร์กิวเมนต์แรก 374 00:17:57,060 --> 00:18:01,620 แต่อาร์กิวเมนต์ที่สอง fopen เป็น ทั่วไปสามสายและ - ใช่ 375 00:18:01,620 --> 00:18:02,210 aleja 376 00:18:02,210 --> 00:18:03,490 >> aleja: การผนวก 377 00:18:03,490 --> 00:18:06,840 >> เจสัน Hirschhorn: ถ้าคุณต้องการที่จะ ผนวกกับไฟล์ที่มีอยู่แล้ว 378 00:18:06,840 --> 00:18:07,810 >> นักเรียน 5: อาร์สำหรับการอ่าน 379 00:18:07,810 --> 00:18:09,930 >> เจสัน Hirschhorn: A ถ้าคุณ ต้องการที่จะอ่านจากแฟ้ม 380 00:18:09,930 --> 00:18:10,670 >> นักเรียนที่ 6: W การเขียน 381 00:18:10,670 --> 00:18:12,840 >> เจสัน Hirschhorn: และ W, ถ้าคุณ ต้องการที่จะเขียนไปยังแฟ้ม 382 00:18:12,840 --> 00:18:17,570 ดังนั้นในกรณีนี้เรากำลังเขียน ไปยังแฟ้มเพื่อให้เรามีน้ำหนัก 383 00:18:17,570 --> 00:18:22,360 คุณเปิดคุณยังมีการบันทึก ไฟล์ที่และที่ที่มี 384 00:18:22,360 --> 00:18:26,000 รหัสไปทางด้านซ้ายมือของ ผู้ประกอบการที่ได้รับมอบหมาย - 385 00:18:26,000 --> 00:18:31,220 ฉันสร้างตัวชี้ไปยังแฟ้ม เรียกว่าในกรณีนี้ไฟล์ 386 00:18:31,220 --> 00:18:36,070 >> เราจะไม่ต้องกังวลอะไร สิ่งนี้ไฟล์เป็นตัวพิมพ์ใหญ่ทั้งหมด 387 00:18:36,070 --> 00:18:40,600 พอเพียงที่จะบอกว่ามันเป็นเวลานาน กระแสของศูนย์และคน 388 00:18:40,600 --> 00:18:44,970 และนั่นคือวิธีการที่เราจะไป ทำงานได้และเข้าใจมัน 389 00:18:44,970 --> 00:18:47,300 >> สิ่งต่อไปที่เราต้องทำ - และ นี้เป็นสิ่งสำคัญอย่างเหลือเชื่อ - 390 00:18:47,300 --> 00:18:49,070 เมื่อใดก็ตามที่คุณเปิดแฟ้ม - 391 00:18:49,070 --> 00:18:54,250 ในความเป็นจริงเมื่อใดก็ตามที่คุณโทร malloc สำหรับ ตัวอย่างและได้รับหน่วยความจำบางและพยายาม 392 00:18:54,250 --> 00:18:57,980 และบันทึกไว้ในตัวชี้คุณเสมอ ต้องการที่จะตรวจสอบให้แน่ใจว่า 393 00:18:57,980 --> 00:19:00,230 ฟังก์ชั่นไม่ได้กลับมาเป็นโมฆะ 394 00:19:00,230 --> 00:19:05,230 >> ดังนั้นในกรณีนี้เราจะตรวจสอบเพื่อให้ ให้แน่ใจว่าเราได้เปิดจริง 395 00:19:05,230 --> 00:19:10,230 ยื่นได้อย่างถูกต้องและมี ข้อผิดพลาดในโปรแกรมของเราไม่มี 396 00:19:10,230 --> 00:19:15,160 ถัดไปเมื่อเราได้ตรวจสอบเพื่อให้แน่ใจว่า ว่าเรามีไฟล์ทำงานที่เราสามารถทำได้ 397 00:19:15,160 --> 00:19:18,520 เขียนหรืออ่านจาก หรือผนวกไปยังแฟ้ม 398 00:19:18,520 --> 00:19:24,270 ในกรณีนี้ผมเพียงแค่พิมพ์ บรรทัดเดียวกับไฟล์นี้ 399 00:19:24,270 --> 00:19:25,450 >> ฉันจะรู้ได้อย่างไรว่า? 400 00:19:25,450 --> 00:19:27,990 ดีฉันใช้ฟังก์ชันนี้ เรียกว่า fprintf 401 00:19:27,990 --> 00:19:30,970 ทุกฟังก์ชั่นที่คุณจะใช้ เมื่อเขียนหรืออ่านจากหรือ 402 00:19:30,970 --> 00:19:34,950 การจัดการกับไฟล์ที่จะคล้ายกับ ฟังก์ชั่นที่คุณเคยเห็นมาก่อน แต่ 403 00:19:34,950 --> 00:19:38,420 เริ่มต้นด้วยตัวอักษร F, ยืนไฟล์ 404 00:19:38,420 --> 00:19:43,440 และ fprintf ซึ่งแตกต่างจากการพิมพ์ตามปกติของเรา app ที่ใช้อาร์กิวเมนต์เพิ่มเติมอย่างใดอย่างหนึ่ง 405 00:19:43,440 --> 00:19:47,800 และที่เป็นไฟล์ที่คุณ ต้องการพิมพ์บรรทัดนี้ไป 406 00:19:47,800 --> 00:19:50,640 >> ผมไม่ได้มีอะไรที่จะ ด้านขวาของ ohai 407 00:19:50,640 --> 00:19:52,860 ผมไม่ได้มีที่สาม อาร์กิวเมนต์ printf - 408 00:19:52,860 --> 00:19:57,030 หรืออาร์กิวเมนต์ที่สอง printf, อาร์กิวเมนต์ที่สามจะ fprintf เพราะฉัน 409 00:19:57,030 --> 00:19:59,480 ไม่ได้มีตัวยึดใด ๆ ที่นี่ 410 00:19:59,480 --> 00:20:01,070 ฉันไม่ได้รวมถึงตัวแปรใด ๆ 411 00:20:01,070 --> 00:20:06,070 แต่อีกครั้ง fprintf และทุกไฟล์เหล่านี้ ฟังก์ชั่นที่ทำงานกับไฟล์ 412 00:20:06,070 --> 00:20:09,820 โดยทั่วไปจะต้องมีแฟ้ม ที่พวกเขากำลังปฏิบัติการ 413 00:20:09,820 --> 00:20:15,960 >> สุดท้ายสิ่งที่สำคัญสุดท้ายที่จะ ทำคือการปิดแฟ้มเช่นเดียวกับ 414 00:20:15,960 --> 00:20:19,530 ด้วย - เมื่อใดก็ตามที่เรา malloc บางสิ่งบางอย่าง เราต้องการที่จะเป็นอิสระบางสิ่งบางอย่างที่เราเกรงว่า 415 00:20:19,530 --> 00:20:22,730 มีหน่วยความจำรั่ว - เราต้องการ ปิดแฟ้มของเรา 416 00:20:22,730 --> 00:20:28,180 หากโปรแกรมนี้ออกได้โดยไม่ต้องปิด ไฟล์ราคาที่ไม่มีอะไรที่จะไป 417 00:20:28,180 --> 00:20:30,050 ที่ไม่ถูกต้องโดยเฉพาะอย่างยิ่งถ้ามัน เป็นไฟล์ขนาดเล็ก 418 00:20:30,050 --> 00:20:35,020 >> แต่มันเป็นอย่างแน่นอนรูปแบบการเข้ารหัสที่ดี และการปฏิบัติเสมอปิดแฟ้มของคุณ 419 00:20:35,020 --> 00:20:38,050 เมื่อคุณเสร็จสิ้นการใช้มัน 420 00:20:38,050 --> 00:20:43,630 เพื่อให้เป็นพื้นฐานของไฟล์ I / O คุณอาจได้เห็นว่าก่อนหรือ 421 00:20:43,630 --> 00:20:45,710 ดูมันในการที่ยอดเยี่ยมในระยะสั้น 422 00:20:45,710 --> 00:20:48,410 ไม่มีใครมีคำถามใด ๆ ก่อนที่จะ เราไปลงในบางเข้ารหัสการปฏิบัติ 423 00:20:48,410 --> 00:20:51,800 ปัญหาเกี่ยวกับไฟล์ I / O หรือ ขั้นตอนที่ฉันเพิ่งไปมากกว่า 424 00:20:51,800 --> 00:21:00,198 425 00:21:00,198 --> 00:21:03,162 >> [พิมพ์ดีดเสียง] 426 00:21:03,162 --> 00:21:04,150 >> เจสัน Hirschhorn: คุณ มีคำถาม Avi? 427 00:21:04,150 --> 00:21:04,660 >> AVI: เลขที่ 428 00:21:04,660 --> 00:21:04,740 >> เจสัน Hirschhorn: OK 429 00:21:04,740 --> 00:21:06,746 ฉันจะรออีก เจ็ดวินาที 430 00:21:06,746 --> 00:21:07,590 [หัวเราะ] 431 00:21:07,590 --> 00:21:08,620 นั่นคือเคล็ดลับที่ดีจริงๆ 432 00:21:08,620 --> 00:21:10,750 พวกคุณไม่ชอบ การถามคำถาม 433 00:21:10,750 --> 00:21:11,660 ที่ปรับได้ 434 00:21:11,660 --> 00:21:12,330 ตกลง 435 00:21:12,330 --> 00:21:17,620 ดังนั้นปัญหาการปฏิบัติของเราเป็นครั้งแรกที่เรามี จะซ้ำกันฟังก์ชั่นของ 436 00:21:17,620 --> 00:21:22,330 เครื่องมือบรรทัดคำสั่งที่คุณอาจ ใช้ก่อน - สำเนา - 437 00:21:22,330 --> 00:21:23,500 เครื่องมือคัดลอก 438 00:21:23,500 --> 00:21:28,050 ถ้าคุณพิมพ์ cp แล้วผ่านมันสอง ข้อโต้แย้งที่เข้ากับขั้วของคุณที่คุณสามารถ 439 00:21:28,050 --> 00:21:28,980 คัดลอกไฟล์ 440 00:21:28,980 --> 00:21:31,220 และเป็นสิ่งที่เราจะไป ที่จะเขียนในตอนนี้ 441 00:21:31,220 --> 00:21:35,830 >> ดังนั้นอีกครั้งอ่านออกของภาพนิ่งนี้ผมต้องการ คุณสามารถเขียนโปรแกรมที่จะใช้เวลา 442 00:21:35,830 --> 00:21:38,130 สองและมีเพียงสองบรรทัดคำสั่ง ขัดแย้ง - 443 00:21:38,130 --> 00:21:40,750 แฟ้มแหล่งที่มาและแฟ้มปลายทาง - 444 00:21:40,750 --> 00:21:44,590 และสำเนาเนื้อหาของแหล่งที่มา แฟ้มแฟ้มปลายทาง 445 00:21:44,590 --> 00:21:46,960 หนึ่งไบต์ในเวลา 446 00:21:46,960 --> 00:21:48,510 เพื่อให้เป็นจำนวนมากที่จะขอ 447 00:21:48,510 --> 00:21:52,200 >> อีกครั้งเป็นวิธีการที่ดีในการนี​​้คือการ ไม่ได้ไปตรงกับรหัส C แต่ 448 00:21:52,200 --> 00:21:54,280 ทำลายมันลงไม่กี่ขั้นตอน 449 00:21:54,280 --> 00:21:58,400 ขั้นแรกให้คิดเกี่ยวกับตรรกะ - ว่า สิ่งที่ฉันขอให้คุณทำ - 450 00:21:58,400 --> 00:22:00,620 และทำความเข้าใจทั้งหมดของ ขั้นตอนในการแก้ไขปัญหานี้ 451 00:22:00,620 --> 00:22:04,410 ไม่ได้อยู่ใน C เพียงใน pseudocode บาง หรือแม้กระทั่งรูปแบบของจิต 452 00:22:04,410 --> 00:22:06,030 สิ่งที่เกิดขึ้น 453 00:22:06,030 --> 00:22:10,050 >> ถัดไปเมื่อคุณมี pseudocode ลง คิดออกว่า pseudocode 454 00:22:10,050 --> 00:22:14,600 แผนที่ลงบนเครื่องมือและสิ่งที่เราได้ เรียนรู้ที่จะใช้ในการ C. 455 00:22:14,600 --> 00:22:19,070 >> และในที่สุดเมื่อคุณมีทุกอย่างที่ ร่วมกันคุณสามารถรหัสปัญหา 456 00:22:19,070 --> 00:22:23,370 ใช้เวลา 5 ถึง 10 นาทีในการ ทำงานเกี่ยวกับปัญหานี้ 457 00:22:23,370 --> 00:22:25,800 ฉันจะใส่คำแนะนำ กลับขึ้นไปในครั้งที่สอง 458 00:22:25,800 --> 00:22:27,990 แล้วเราจะไปกว่า pseudocode และรหัส 459 00:22:27,990 --> 00:22:29,230 มันอยู่เป็นกลุ่ม 460 00:22:29,230 --> 00:22:31,640 >> หากคุณมีคำถามใด ๆ ในขณะที่คุณกำลัง ที่ทำงานเกี่ยวกับเรื่องนี้ให้ความรู้สึกอิสระที่จะยกระดับ 461 00:22:31,640 --> 00:22:34,260 มือของคุณและฉันจะมา ไปรอบ ๆ และตอบพวกเขา 462 00:22:34,260 --> 00:22:37,020 463 00:22:37,020 --> 00:22:39,330 >> นักเรียน 7: ฉันสามารถรูด ชิ้นส่วนของกระดาษ 464 00:22:39,330 --> 00:22:41,537 >> เจสัน Hirschhorn: เกิดอะไรขึ้น 465 00:22:41,537 --> 00:26:46,047 466 00:26:46,047 --> 00:26:48,043 >> [พิมพ์ดีดเสียง] 467 00:26:48,043 --> 00:26:48,730 >> เจสัน Hirschhorn: OK 468 00:26:48,730 --> 00:26:51,710 ขอไปกว่า pseudocode แรกและ แล้วฉันจะให้คุณทั้งคู่มากขึ้น 469 00:26:51,710 --> 00:26:52,960 นาทีเพื่อเสร็จสิ้นการเข้ารหัส 470 00:26:52,960 --> 00:26:55,540 471 00:26:55,540 --> 00:26:58,650 >> ใครอยากจะเริ่มต้นฉันลง กับบรรทัดแรกของ 472 00:26:58,650 --> 00:27:00,030 pseudocode สำหรับการทำงานนี้ 473 00:27:00,030 --> 00:27:03,330 474 00:27:03,330 --> 00:27:05,740 >> นักเรียน 8: ตรวจสอบให้แน่ใจว่า คุณได้รับสองไฟล์ 475 00:27:05,740 --> 00:27:06,990 >> เจสัน Hirschhorn: OK 476 00:27:06,990 --> 00:27:21,270 477 00:27:21,270 --> 00:27:22,990 และถ้าเราไม่ได้? 478 00:27:22,990 --> 00:27:25,974 >> นักเรียน 8: ฉันจะกลับ 0 479 00:27:25,974 --> 00:27:27,872 >> เจสัน Hirschhorn: เราควรจะกลับ 0? 480 00:27:27,872 --> 00:27:30,182 >> นักเรียน 8: กลับ - 481 00:27:30,182 --> 00:27:30,650 blanking 482 00:27:30,650 --> 00:27:30,850 ขอโทษ 483 00:27:30,850 --> 00:27:31,210 >> เจสัน Hirschhorn: ใช่ 484 00:27:31,210 --> 00:27:32,710 อาจจะไม่ได้ 0 485 00:27:32,710 --> 00:27:34,680 เพราะ 0 หมายถึงทุกอย่างที่เป็นสิ่งที่ดี 486 00:27:34,680 --> 00:27:35,030 ตกลง 487 00:27:35,030 --> 00:27:36,730 เพื่อให้เป็นบรรทัดแรก ของ pseudocode 488 00:27:36,730 --> 00:27:38,715 ที่มีบรรทัดที่สองของ pseudocode? 489 00:27:38,715 --> 00:27:40,630 >> นักเรียน 9: เปิดไฟล์ทั้งสองได้หรือไม่ 490 00:27:40,630 --> 00:27:41,880 >> เจสัน Hirschhorn: เปิดไฟล์ทั้งสอง 491 00:27:41,880 --> 00:27:49,970 492 00:27:49,970 --> 00:27:50,920 OK? 493 00:27:50,920 --> 00:27:52,850 >> นักเรียน 10: ตรวจสอบดู ถ้าไฟล์เป็นโมฆะ? 494 00:27:52,850 --> 00:28:10,906 495 00:28:10,906 --> 00:28:12,580 >> เจสัน Hirschhorn: ตรวจสอบให้ แน่ใจว่าไม่เป็นโมฆะ 496 00:28:12,580 --> 00:28:15,800 เช่นกัน - 497 00:28:15,800 --> 00:28:17,540 เฉือน 0 - 498 00:28:17,540 --> 00:28:18,887 คือโมฆะ? 499 00:28:18,887 --> 00:28:20,080 >> นักเรียน 11: เลขที่ 500 00:28:20,080 --> 00:28:21,190 >> เจสัน Hirschhorn: นั่นไม่โมฆะ 501 00:28:21,190 --> 00:28:23,400 ที่เรียกว่าเทอร์มินัล 502 00:28:23,400 --> 00:28:25,580 มันสะกดจริงมีเพียงหนึ่งลิตร 503 00:28:25,580 --> 00:28:28,580 ดังนั้นการตรวจสอบสิ่งที่ต่อว่า - ที่จริงตัวละคร - 504 00:28:28,580 --> 00:28:31,710 ดังนั้นการตรวจสอบบางสิ่งบางอย่างกับที่ ไม่เหมือนกับการตรวจสอบเพื่อดูว่ามัน 505 00:28:31,710 --> 00:28:32,690 เท่ากับโมฆะ 506 00:28:32,690 --> 00:28:34,100 >> และบางคน - 507 00:28:34,100 --> 00:28:36,040 ในแบบทดสอบและปัญหาของพวกเขา ชุด - ได้มี 508 00:28:36,040 --> 00:28:36,890 สองผู้ที่สับสน 509 00:28:36,890 --> 00:28:38,830 แต่ทั้งสองของผู้ที่เป็น ในความเป็นจริงที่แตกต่างกัน 510 00:28:38,830 --> 00:28:40,220 หนึ่งสิ้นสุดสตริง - 511 00:28:40,220 --> 00:28:43,210 หนึ่งเป็นตัวชี้ไป 0 512 00:28:43,210 --> 00:28:46,490 >> นักเรียน 12: ทำไมคุณจะไม่ตรวจสอบ ตรวจสอบให้แน่ใจว่าไฟล์ที่ไม่โมฆะ 513 00:28:46,490 --> 00:28:48,670 ก่อนที่จะเปิดได้อย่างไร 514 00:28:48,670 --> 00:28:54,772 >> เจสัน Hirschhorn: ดังนั้นเปิดบันทึก บางสิ่งบางอย่างในแฟ้มที่ 515 00:28:54,772 --> 00:28:57,780 และหากคุณไปกลับมาที่นี่ - 516 00:28:57,780 --> 00:28:59,520 ดังนั้นสายนี้ - fopen - 517 00:28:59,520 --> 00:29:05,300 จะให้ที่อยู่และจัดเก็บ ที่อยู่ในแฟ้มที่ว่าการทำงาน 518 00:29:05,300 --> 00:29:07,650 ถ้าไม่ได้ทำงานก็ จะเก็บโมฆะ - 519 00:29:07,650 --> 00:29:08,020 >> นักเรียน 12: โอ้ 520 00:29:08,020 --> 00:29:08,180 ตกลง 521 00:29:08,180 --> 00:29:08,500 มีคุณ 522 00:29:08,500 --> 00:29:09,050 >> เจสัน Hirschhorn: ในแฟ้ม 523 00:29:09,050 --> 00:29:11,990 ดังนั้นคุณจึงไม่สามารถตรวจสอบโมฆะ ก่อนที่คุณจะเปิดพวกเขา 524 00:29:11,990 --> 00:29:13,520 NULL หมายถึงสิ่งที่ไม่ได้ ทำงานอย่างถูกต้อง 525 00:29:13,520 --> 00:29:18,030 526 00:29:18,030 --> 00:29:18,740 ตกลง 527 00:29:18,740 --> 00:29:22,590 เพื่อตรวจสอบเพื่อให้แน่ใจว่าไม่เป็น? 528 00:29:22,590 --> 00:29:23,200 หรือมีอะไรบ้าง 529 00:29:23,200 --> 00:29:23,770 เราคิดอย่างไร 530 00:29:23,770 --> 00:29:24,310 เราจะไปกับที่ 531 00:29:24,310 --> 00:29:24,520 >> นักเรียน 13 สินค้า 532 00:29:24,520 --> 00:29:25,020 >> เจสัน Hirschhorn: หรือไม่ 533 00:29:25,020 --> 00:29:25,930 ไม่เป็น? 534 00:29:25,930 --> 00:29:26,350 >> นักเรียน 13 สินค้า 535 00:29:26,350 --> 00:29:26,390 >> เจสัน Hirschhorn: OK 536 00:29:26,390 --> 00:29:28,510 เราดูเหมือนจะมีบางส่วน สอดคล้องกับที่ 537 00:29:28,510 --> 00:29:30,520 ไม่เป็นโมฆะ 538 00:29:30,520 --> 00:29:32,250 ตกลงบรรทัดถัดไปของ pseudocode 539 00:29:32,250 --> 00:29:33,600 ที่ไม่ได้ให้ฉันบรรทัดหรือยัง 540 00:29:33,600 --> 00:29:37,350 541 00:29:37,350 --> 00:29:38,295 เราจะรอให้คุณ 542 00:29:38,295 --> 00:29:39,020 ใช่ 543 00:29:39,020 --> 00:29:40,895 >> นักเรียน 14: คุณต้องอ่าน จากไฟล์แรก 544 00:29:40,895 --> 00:29:42,290 >> เจสัน Hirschhorn: OK 545 00:29:42,290 --> 00:29:46,240 >> นักเรียน 14: หรือที่เราใช้ fscanf หรือ สิ่งที่ต้องการที่ไฟล์แรกได้หรือไม่ 546 00:29:46,240 --> 00:29:50,650 >> เจสัน Hirschhorn: ดังนั้นเราต้องการที่จะ อ่านจากไฟล์แรกและ - 547 00:29:50,650 --> 00:29:51,900 ให้ใส่ที่อยู่ที่นี่ 548 00:29:51,900 --> 00:30:00,600 549 00:30:00,600 --> 00:30:01,880 อ่านจากแฟ้มแหล่งที่มา 550 00:30:01,880 --> 00:30:05,370 และแล้วสิ่งที่เราทำหลังจากที่เรา อ่านจากแฟ้มแหล่งที่มา? 551 00:30:05,370 --> 00:30:06,620 คนอื่น? 552 00:30:06,620 --> 00:30:09,150 553 00:30:09,150 --> 00:30:12,190 >> นักเรียน 15: เขียนลงใน แฟ้มปลายทางหรือไม่ 554 00:30:12,190 --> 00:30:22,080 555 00:30:22,080 --> 00:30:25,620 >> เจสัน Hirschhorn: เราเขียนเพื่อ แฟ้มปลายทางและ - 556 00:30:25,620 --> 00:30:26,210 ตกลง 557 00:30:26,210 --> 00:30:30,030 อะไรที่เราขาดหายไป 558 00:30:30,030 --> 00:30:32,460 คนอื่น ๆ ที่ยังไม่ได้ให้ฉัน บรรทัดของรหัสยัง - ของ pseudocode 559 00:30:32,460 --> 00:30:33,510 ใช่ 560 00:30:33,510 --> 00:30:36,540 >> นักเรียน 16: บางทีคุณอาจจะสามารถตรวจสอบ ไม่ว่าจะมีบางสิ่งบางอย่างในการอ่านสำหรับ 561 00:30:36,540 --> 00:30:37,970 เช่นสายต่อไปหรือไม่ 562 00:30:37,970 --> 00:30:39,550 ที่เป็นเช่นบรรทัดถัดไป ดูว่ามันมีอยู่ 563 00:30:39,550 --> 00:30:40,660 >> [อิเล็กทรอนิกส์เสียงบี๊บ] 564 00:30:40,660 --> 00:30:41,095 >> เจสัน Hirschhorn: โอ๊ะ 565 00:30:41,095 --> 00:30:43,120 นั่นเป็นซอฟต์แวร์ journaling ของฉัน 566 00:30:43,120 --> 00:30:43,580 ใช่? 567 00:30:43,580 --> 00:30:44,960 >> นักเรียน 16: ใช่ 568 00:30:44,960 --> 00:30:48,940 >> เจสัน Hirschhorn: เพื่อให้ ให้ฉันอีกครั้งหนึ่ง 569 00:30:48,940 --> 00:30:51,640 >> นักเรียน 16: ตรวจสอบว่ามี ยังคงเป็นบรรทัดถัดไปจาก 570 00:30:51,640 --> 00:30:52,920 แฟ้มแหล่งที่มาในการอ่าน 571 00:30:52,920 --> 00:30:53,500 >> เจสัน Hirschhorn: OK 572 00:30:53,500 --> 00:30:56,060 ดังนั้นเราไม่ได้อ่านบรรทัด - กำลังอ่านไบต์ที่นี่ - 573 00:30:56,060 --> 00:30:57,590 แต่คุณที่ถูกต้อง 574 00:30:57,590 --> 00:31:00,040 เราต้องการที่จะอ่านและเขียนจน ไม่มีไบต์ 575 00:31:00,040 --> 00:31:11,430 576 00:31:11,430 --> 00:31:11,735 ตกลง 577 00:31:11,735 --> 00:31:16,940 และอื่น ๆ เหล่านี้จริงๆควรจะเยื้อง นิด ๆ หน่อย ๆ เพราะพวกเขากำลังอยู่ภายใต้การมี 578 00:31:16,940 --> 00:31:17,470 ใช่มั้ย? 579 00:31:17,470 --> 00:31:20,620 จนกว่าเราจะออกจากไบต์ที่เรากำลังจะ อ่านจากแฟ้มแหล่งที่มาและเขียน 580 00:31:20,620 --> 00:31:22,160 ในแฟ้มปลายทาง 581 00:31:22,160 --> 00:31:24,510 >> และแล้วสิ่งที่เป็นครั้งสุดท้าย สายของ pseudocode? 582 00:31:24,510 --> 00:31:26,380 คนที่ไม่ได้รับ สิ่งที่ฉันยัง 583 00:31:26,380 --> 00:31:29,270 584 00:31:29,270 --> 00:31:30,260 >> นักเรียน 17: ปิดไฟล์หรือไม่ 585 00:31:30,260 --> 00:31:31,510 >> เจสัน Hirschhorn: แน่นอน 586 00:31:31,510 --> 00:31:36,370 587 00:31:36,370 --> 00:31:37,450 ปิดไฟล์ 588 00:31:37,450 --> 00:31:38,400 ดังนั้นจึงมี pseudocode ของเรา 589 00:31:38,400 --> 00:31:41,870 ฉันจะใส่ลงไปใน pseudocode Gedit และในไม่กี่นาทีเรา 590 00:31:41,870 --> 00:31:44,626 จะรหัสนี้ร่วมกัน 591 00:31:44,626 --> 00:33:55,280 592 00:33:55,280 --> 00:33:56,000 >> ตกลง 593 00:33:56,000 --> 00:33:58,290 ขอให้เราเริ่มต้นเป็นกลุ่ม 594 00:33:58,290 --> 00:33:59,940 Nishant ผมมีไฟล์ใหม่ของฉัน 595 00:33:59,940 --> 00:34:01,130 ผมได้เปิดเพียงแค่นี้ขึ้น 596 00:34:01,130 --> 00:34:01,880 เอกสาร Untitled 1 597 00:34:01,880 --> 00:34:05,490 อะไรเป็นสิ่งแรกที่ฉันควรทำอย่างไร 598 00:34:05,490 --> 00:34:07,040 >> Nishant: รวมทั้งห้องสมุด? 599 00:34:07,040 --> 00:34:08,219 >> เจสัน Hirschhorn: OK 600 00:34:08,219 --> 00:34:11,070 สิ่งที่ห้องสมุด? 601 00:34:11,070 --> 00:34:17,570 >> Nishant: stdio.h, stdlib.h ผมเชื่อว่า? 602 00:34:17,570 --> 00:34:18,000 >> เจสัน Hirschhorn: OK 603 00:34:18,000 --> 00:34:21,592 stdlib หาคืออะไร 604 00:34:21,592 --> 00:34:23,010 >> Nishant: ฉันลืม 605 00:34:23,010 --> 00:34:23,219 >> เจสัน Hirschhorn: OK 606 00:34:23,219 --> 00:34:24,179 ดังนั้นรวม stdio 607 00:34:24,179 --> 00:34:28,630 ฉันควรทำอย่างไรก่อน ผมเริ่มเขียนโปรแกรม? 608 00:34:28,630 --> 00:34:29,710 >> Nishant เขียนส่วนหัวหรือไม่ 609 00:34:29,710 --> 00:34:31,830 >> เจสัน Hirschhorn: วิธี ฉันจะได้รับมันสี? 610 00:34:31,830 --> 00:34:34,060 >> [VOICES interposing] 611 00:34:34,060 --> 00:34:35,040 >> Nishant: คุณจะได้รับมันได้อย่างไรสี? 612 00:34:35,040 --> 00:34:38,060 >> เจสัน Hirschhorn: วิธี ผมสีเข้ารหัส? 613 00:34:38,060 --> 00:34:38,570 >> Nishant: ผมไม่ทราบว่า 614 00:34:38,570 --> 00:34:38,830 โอ้ 615 00:34:38,830 --> 00:34:39,389 ประหยัด 616 00:34:39,389 --> 00:34:39,929 >> เจสัน Hirschhorn: บันทึก 617 00:34:39,929 --> 00:34:40,270 ใช่ 618 00:34:40,270 --> 00:34:41,760 ฉันควรจะบันทึกเป็น c. 619 00:34:41,760 --> 00:34:46,239 เพื่อบัน​​ทึกไว้บนเดสก์ทอปเป็น cp.c. 620 00:34:46,239 --> 00:34:47,280 หวาน 621 00:34:47,280 --> 00:34:51,199 และถ้าผมต้องการที่จะได้รับเต็มรูปแบบ จุด, สิ่งที่ฉันควร 622 00:34:51,199 --> 00:34:53,085 รวมถึงที่อยู่ด้านบนหรือไม่ 623 00:34:53,085 --> 00:34:58,390 >> Nishant: คุณสามารถเขียนชื่อชื่อของคุณ ของโปรแกรมและวัตถุประสงค์ 624 00:34:58,390 --> 00:34:59,640 ของโปรแกรมด้วยหรือไม่ 625 00:34:59,640 --> 00:35:08,400 626 00:35:08,400 --> 00:35:10,040 >> เจสัน Hirschhorn: ดูดี 627 00:35:10,040 --> 00:35:10,470 ยอดเยี่ยม 628 00:35:10,470 --> 00:35:12,940 เพื่อให้คุณได้เริ่มต้นเราออกอย่างสมบูรณ์ 629 00:35:12,940 --> 00:35:13,720 # include - 630 00:35:13,720 --> 00:35:15,365 เรายังจะเขียน - 631 00:35:15,365 --> 00:35:30,050 632 00:35:30,050 --> 00:35:30,870 ตกลง 633 00:35:30,870 --> 00:35:33,520 ดังนั้นฉันคิดว่าฉันตั้งค่าทั้งหมดที่จะไป 634 00:35:33,520 --> 00:35:38,003 ที่มีบรรทัดแรกของรหัสสำหรับฉัน - หรือบรรทัดแรกของรหัสที่ 635 00:35:38,003 --> 00:35:41,280 มันจะใช้เวลาในการตอบสนองครั้งแรกของเรา แสดงความคิดเห็นใน pseudocode? 636 00:35:41,280 --> 00:35:41,985 คุณ 637 00:35:41,985 --> 00:35:48,780 >> นักเรียน 18: ไม่ควรที่จะเป็น int argc และ char * argv? 638 00:35:48,780 --> 00:35:49,490 >> เจสัน Hirschhorn: ผมคิดว่า คุณขวา 639 00:35:49,490 --> 00:35:56,270 ลองเปลี่ยนเป็น int หลักวงเล็บเปิด int argc จุลภาค char * argv? 640 00:35:56,270 --> 00:35:57,150 เช่นเดียวกับที่ 641 00:35:57,150 --> 00:35:57,410 >> นักเรียน 18: วงเล็บ 642 00:35:57,410 --> 00:35:58,260 >> เจสัน Hirschhorn: วงเล็บ 643 00:35:58,260 --> 00:35:59,860 เปิดวงเล็บวงเล็บปิด ผู้ปกครองอย่างใกล้ชิด 644 00:35:59,860 --> 00:36:00,240 สมบูรณ์ 645 00:36:00,240 --> 00:36:02,160 ตอนนี้ผมสามารถใช้อาร์กิวเมนต์บรรทัดคำสั่ง 646 00:36:02,160 --> 00:36:02,430 ตกลง 647 00:36:02,430 --> 00:36:04,250 ให้แน่ใจว่าเรากำลังได้รับสองไฟล์ 648 00:36:04,250 --> 00:36:07,905 คุณสามารถให้ฉันเช่นกัน 649 00:36:07,905 --> 00:36:09,180 >> นักเรียน 18: ถ้า argc - 650 00:36:09,180 --> 00:36:11,060 อันนี้ไม่เท่ากับ 3 651 00:36:11,060 --> 00:36:14,360 >> เจสัน Hirschhorn: ถ้าวงเล็บเปิด argc ไม่เท่ากับ 3? 652 00:36:14,360 --> 00:36:16,970 >> นักเรียน 18: ใช่คุณกลับ 1 หรืออะไร 653 00:36:16,970 --> 00:36:17,460 >> เจสัน Hirschhorn: ขออภัย 654 00:36:17,460 --> 00:36:19,120 >> นักเรียน 18: ย้อนกลับ 1 หรืออะไร 655 00:36:19,120 --> 00:36:20,270 >> เจสัน Hirschhorn: ย้อนกลับ 1 656 00:36:20,270 --> 00:36:22,230 OK? 657 00:36:22,230 --> 00:36:22,970 ยิ่งใหญ่ 658 00:36:22,970 --> 00:36:24,290 เปิดไฟล์ทั้งสอง 659 00:36:24,290 --> 00:36:26,160 ที่สามารถช่วยให้ฉันเปิดไฟล์ทั้งสอง 660 00:36:26,160 --> 00:36:28,125 ใครยังไม่ได้รับรหัสฉันหรือยัง 661 00:36:28,125 --> 00:36:31,510 662 00:36:31,510 --> 00:36:32,320 เคิร์ต? 663 00:36:32,320 --> 00:36:36,145 >> KURT: ดังนั้นตัวพิมพ์ใหญ่ทั้งหมด F-I-L-E แหล่งดาว 664 00:36:36,145 --> 00:36:39,390 665 00:36:39,390 --> 00:36:40,920 >> เจสัน Hirschhorn: ฉันจะ ที่จะออกจากสระ 666 00:36:40,920 --> 00:36:41,570 เหล่านี้จะเย็น 667 00:36:41,570 --> 00:36:42,716 มันก็เหมือนกับ Tumblr 668 00:36:42,716 --> 00:36:44,610 >> นักเรียน 18: เท่ากับ fopen - 669 00:36:44,610 --> 00:36:46,612 >> เจสัน Hirschhorn: เท่ากับ fopen? 670 00:36:46,612 --> 00:36:49,870 >> นักเรียน 18: เปิด paren, argv วงเล็บเปิด 671 00:36:49,870 --> 00:36:50,055 >> เจสัน Hirschhorn: รอ 672 00:36:50,055 --> 00:36:50,240 ขอโทษ 673 00:36:50,240 --> 00:36:51,050 วงเล็บเปิด 674 00:36:51,050 --> 00:36:51,456 ตกลง 675 00:36:51,456 --> 00:36:53,080 >> นักเรียน 18: ใช่ 676 00:36:53,080 --> 00:36:55,110 argv 1 ย่อย 677 00:36:55,110 --> 00:36:55,860 >> เจสัน Hirschhorn: ตำบล 1? 678 00:36:55,860 --> 00:36:56,140 >> นักเรียน 18: ใช่ 679 00:36:56,140 --> 00:36:58,540 argv เปิดวงเล็บ 1 - 680 00:36:58,540 --> 00:36:59,730 ใช่ 681 00:36:59,730 --> 00:37:06,470 แล้วจุลภาคแล้วเปิดคู่ อ้าง r พูดคู่ 682 00:37:06,470 --> 00:37:08,250 วงเล็บปิดอัฒภาค 683 00:37:08,250 --> 00:37:09,450 >> เจสัน Hirschhorn: หวาน 684 00:37:09,450 --> 00:37:10,950 และสิ่งที่เกี่ยวกับคนอื่น ๆ 685 00:37:10,950 --> 00:37:16,030 >> นักเรียน 18: คล้าย แต่แทนที่จะ ของ S-R-C คุณจะเรียกมันว่า D-S-T 686 00:37:16,030 --> 00:37:17,060 >> เจสัน Hirschhorn: Oo! 687 00:37:17,060 --> 00:37:17,772 ฉันชอบที่ 688 00:37:17,772 --> 00:37:20,010 >> นักเรียน 18: เพียงแค่ D-S-T ใช่ 689 00:37:20,010 --> 00:37:23,057 แล้ว argv วงเล็บเปิด 2 690 00:37:23,057 --> 00:37:23,200 ใช่ 691 00:37:23,200 --> 00:37:26,720 แล้วน้ำหนักแทน r 692 00:37:26,720 --> 00:37:27,620 ใช่ 693 00:37:27,620 --> 00:37:29,630 >> เจสัน Hirschhorn: Great 694 00:37:29,630 --> 00:37:31,360 คู่ถัดไปของสาย 695 00:37:31,360 --> 00:37:34,040 นอกจากนี้ถ้าใครมีสิ่งที่จะเพิ่ม เส้นที่เราได้ทำอย่าลังเลที่จะ 696 00:37:34,040 --> 00:37:35,690 เพิ่มเหล่านั้นเช่นกัน 697 00:37:35,690 --> 00:37:37,520 ตรวจสอบให้แน่ใจว่าไม่เป็นโมฆะ 698 00:37:37,520 --> 00:37:41,450 ที่สามารถให้ฉันรหัสฉันต้อง ตอบสนองแนว pseudocode ที่ 699 00:37:41,450 --> 00:37:44,430 700 00:37:44,430 --> 00:37:45,870 ธนู 701 00:37:45,870 --> 00:37:58,645 >> ธนู: ถ้า src เท่ากับเท่ากับ โมฆะหรือ dst เท่ากับเท่ากับ 702 00:37:58,645 --> 00:38:04,590 โมฆะแล้วคุณกลับ - 703 00:38:04,590 --> 00:38:07,130 704 00:38:07,130 --> 00:38:07,976 >> เจสัน Hirschhorn: อะไรนะ? 705 00:38:07,976 --> 00:38:08,890 >> ธนู: กลับ 2? 706 00:38:08,890 --> 00:38:09,760 >> เจสัน Hirschhorn: กลับ 2 707 00:38:09,760 --> 00:38:14,400 ดังนั้นหาก paren เปิด src เท่ากับ เท่ากับโมฆะหรือ - 708 00:38:14,400 --> 00:38:15,590 สิ่งที่ thing's - ท่อ? 709 00:38:15,590 --> 00:38:16,346 ท่อ? 710 00:38:16,346 --> 00:38:17,140 เราจะเรียกว่าท่อ 711 00:38:17,140 --> 00:38:22,340 ท่อท่อ dst เท่ากับเท่ากับ โมฆะกลับ 2 712 00:38:22,340 --> 00:38:23,900 OK? 713 00:38:23,900 --> 00:38:26,060 จนกว่าเราจะออกจากไบต์ - 714 00:38:26,060 --> 00:38:29,820 เราเรียงลำดับของการข้ามขั้นตอนนี้จาก ส่วน pseudocode เพื่อจะไปที่นี่ 715 00:38:29,820 --> 00:38:31,970 >> แต่จนกว่าเราจะออกจากไบต์ - สิ่งที่ไม่ว่าเสียงเป็นอย่างไร 716 00:38:31,970 --> 00:38:34,680 สิ่งที่ประเภทของโครงสร้างซี - 717 00:38:34,680 --> 00:38:36,160 แต่ฉันไม่ได้ใช้โครงสร้างคำ เพราะเรากำลังจะเริ่มต้นใช้ 718 00:38:36,160 --> 00:38:37,350 ว่าในกรณีอื่น ๆ - 719 00:38:37,350 --> 00:38:39,495 แต่เครื่องมือ C เสียงที่ได้อย่างไร 720 00:38:39,495 --> 00:38:39,970 >> นักเรียน 19: ห่วง 721 00:38:39,970 --> 00:38:40,980 >> เจสัน Hirschhorn: ห่วง 722 00:38:40,980 --> 00:38:43,060 เสียงเหมือนห่วง 723 00:38:43,060 --> 00:38:49,670 ดังนั้นผู้ที่สามารถให้ฉันบรรทัดแรก วงของรหัสที่นี่? 724 00:38:49,670 --> 00:38:56,320 725 00:38:56,320 --> 00:39:01,980 นอกจากนี้คุณยังสามารถเลือกชนิดของ วงที่คุณต้องการถ้าคุณให้ฉัน 726 00:39:01,980 --> 00:39:03,215 บรรทัดของรหัสนี้ 727 00:39:03,215 --> 00:39:04,150 มีสามชนิด 728 00:39:04,150 --> 00:39:06,530 คุณได้รับเลือก 729 00:39:06,530 --> 00:39:08,080 ฉันขอแนะนำหนึ่งในบรรดา 730 00:39:08,080 --> 00:39:08,410 avi 731 00:39:08,410 --> 00:39:09,230 ซึ่งหนึ่งคุณต้องการได้หรือไม่ 732 00:39:09,230 --> 00:39:09,960 >> AVI: สำหรับ 733 00:39:09,960 --> 00:39:11,460 >> เจสัน Hirschhorn: สำหรับ 734 00:39:11,460 --> 00:39:15,180 >> AVI: Int i เท่ากับศูนย์ 735 00:39:15,180 --> 00:39:17,360 >> เจสัน Hirschhorn: OK 736 00:39:17,360 --> 00:39:18,570 >> AVI: ส่วนนี้ผมไม่แน่ใจว่าเกี่ยวกับ 737 00:39:18,570 --> 00:39:29,080 แต่ฉันมีค่าน้อยกว่าขนาด แหล่งที่มาของดาว? 738 00:39:29,080 --> 00:39:31,128 ผมไม่แน่ใจว่าที่ 739 00:39:31,128 --> 00:39:32,580 >> เจสัน Hirschhorn: OK 740 00:39:32,580 --> 00:39:35,870 >> AVI: เพราะคุณต้องการ ขนาดของไฟล์ใช่ไหม 741 00:39:35,870 --> 00:39:41,090 >> เจสัน Hirschhorn: ดังนั้นนี้อาจจะไม่ ให้เราขนาดของจริง 742 00:39:41,090 --> 00:39:43,010 ยื่นไบต์ 743 00:39:43,010 --> 00:39:47,680 ดังนั้นอะไรที่เราควรทำอย่างไร 744 00:39:47,680 --> 00:39:48,810 เป็นชนิดของวงอื่นคืออะไร 745 00:39:48,810 --> 00:39:50,180 หรือเราควรจะยึดติดอยู่กับห่วงสำหรับ? 746 00:39:50,180 --> 00:39:55,350 747 00:39:55,350 --> 00:39:57,900 >> นักเรียน 20: คุณสามารถทำวงในขณะหรือไม่ 748 00:39:57,900 --> 00:40:01,350 และแล้วสิ่งที่คุณต้องการทำคือ you'd - 749 00:40:01,350 --> 00:40:03,930 เพราะเรามี char * สำหรับแฟ้ม 750 00:40:03,930 --> 00:40:07,950 ดังนั้นถ้าเราเพียงแค่ให้เพิ่มขึ้นที่ จนกว่าเราจะต้องการหาอักขระที่มีค่าที่ 751 00:40:07,950 --> 00:40:08,500 จุดสิ้นสุดของมันได้หรือไม่ 752 00:40:08,500 --> 00:40:11,130 หรือไม่เป็นที่ไม่ว่าไฟล์ที่ทำงานอย่างไร 753 00:40:11,130 --> 00:40:14,300 >> เจสัน Hirschhorn: ดังนั้นเราสามารถเก็บ incrementing ถ่าน * 754 00:40:14,300 --> 00:40:16,340 จนกว่าเราจะหาโมฆะ - 755 00:40:16,340 --> 00:40:18,580 >> นักเรียน 20: เป็นหลักให้ไป ตัวอักษรตามตัวอักษรจนกว่าเราจะตี 756 00:40:18,580 --> 00:40:21,250 ส่วนท้ายของแฟ้ม 757 00:40:21,250 --> 00:40:21,600 >> เจสัน Hirschhorn: ใช่ 758 00:40:21,600 --> 00:40:22,560 ดังนั้นนั่นคือสิ่งที่เราต้องการจะทำ 759 00:40:22,560 --> 00:40:24,545 เราต้องการที่จะให้อ่านตัวอักษร ด้วยตัวอักษรจนกว่าเราจะได้รับ 760 00:40:24,545 --> 00:40:25,080 ส่วนท้ายของแฟ้ม 761 00:40:25,080 --> 00:40:25,375 >> นักเรียน 20: ใช่ 762 00:40:25,375 --> 00:40:25,860 ค้นหา - 763 00:40:25,860 --> 00:40:28,540 สิ่งที่สิ้นสุดหรือป้าย ที่ส่วนท้ายของแฟ้มข้อความ 764 00:40:28,540 --> 00:40:28,620 >> เจสัน Hirschhorn: OK 765 00:40:28,620 --> 00:40:30,140 ดังนั้นเมื่อเราได้รับการสิ้นสุดของไฟล์ - ทำอย่างไรเราจะรู้ว่าเราได้มาถึง 766 00:40:30,140 --> 00:40:33,200 ในตอนท้ายของไฟล์หรือไม่ 767 00:40:33,200 --> 00:40:34,710 ถ้าฉันโทร - 768 00:40:34,710 --> 00:40:35,910 จึงขอย้อนกลับไป 769 00:40:35,910 --> 00:40:37,550 ฟังก์ชั่นคืออะไร 770 00:40:37,550 --> 00:40:39,360 ลองไปที่บรรทัดนี้ที่นี่ 771 00:40:39,360 --> 00:40:40,630 อ่านจากแฟ้มแหล่งที่มา 772 00:40:40,630 --> 00:40:41,880 ที่สามารถให้ฉันบรรทัดของรหัสที่ 773 00:40:41,880 --> 00:40:45,592 774 00:40:45,592 --> 00:40:47,590 >> นักเรียน 21: fscanf? 775 00:40:47,590 --> 00:40:49,110 >> เจสัน Hirschhorn: fscanf 776 00:40:49,110 --> 00:40:49,510 ตกลง 777 00:40:49,510 --> 00:40:52,240 หากฉันต้องการที่จะอ่านมาก โดยเฉพาะหนึ่งไบต์? 778 00:40:52,240 --> 00:40:55,012 779 00:40:55,012 --> 00:40:56,860 >> นักเรียน 21: ผมไม่ทราบว่า 780 00:40:56,860 --> 00:40:57,110 >> เจสัน Hirschhorn: OK 781 00:40:57,110 --> 00:40:59,380 ได้ง่ายกว่า fscanf - สิ่งที่ - 782 00:40:59,380 --> 00:41:01,890 ผมต้องการที่จะอ่านจากแฟ้มแหล่งที่มา? 783 00:41:01,890 --> 00:41:03,720 อ่านจากแฟ้มแหล่งที่มา 784 00:41:03,720 --> 00:41:04,850 เป็นสิ่งที่ฟังก์ชั่น - ใช่ 785 00:41:04,850 --> 00:41:05,380 >> นักเรียน 22: มันเป็น fread? 786 00:41:05,380 --> 00:41:06,070 >> เจสัน Hirschhorn: fread 787 00:41:06,070 --> 00:41:07,550 ผมคิดว่าเราจะมาติดกับ สำหรับตอนนี้ที่ 788 00:41:07,550 --> 00:41:10,380 789 00:41:10,380 --> 00:41:13,650 ชนิดของการขัดแย้ง ไม่ fread ใช้เวลา 790 00:41:13,650 --> 00:41:17,410 >> นักเรียน 22: น่าจะเป็นประเภทไฟล์ แล้วตำแหน่งในไฟล์หรือไม่ 791 00:41:17,410 --> 00:41:19,550 >> เจสัน Hirschhorn: สิ่งที่ฉันสามารถพิมพ์ที่นี่ ที่จะคิดออกว่าสิ่งที่ประเภทของการขัดแย้ง 792 00:41:19,550 --> 00:41:20,950 fread จะ? 793 00:41:20,950 --> 00:41:23,710 >> นักเรียนหลาย: คน fread 794 00:41:23,710 --> 00:41:24,740 >> เจสัน Hirschhorn: คน fread และ fwrite 795 00:41:24,740 --> 00:41:25,980 ดูเหมือนว่าพวกเขาออกไปเที่ยวด้วยกัน 796 00:41:25,980 --> 00:41:29,589 ดังนั้น fread ใช้อาร์กิวเมนต์กี่ 797 00:41:29,589 --> 00:41:30,920 >> นักเรียน 23: สี่ 798 00:41:30,920 --> 00:41:32,690 >> เจสัน Hirschhorn: มันจะใช้เวลา สี่ข้อโต้แย้ง 799 00:41:32,690 --> 00:41:41,100 มันต้องใช้ตัวชี้ขนาดและที่ สิ่งซึ่งเป็นที่แปลกและบางไฟล์ 800 00:41:41,100 --> 00:41:42,000 OK? 801 00:41:42,000 --> 00:41:43,990 ลองอ่านเกี่ยวกับมันที่นี่ 802 00:41:43,990 --> 00:41:49,370 "fread ฟังก์ชันอ่าน n memb องค์ประกอบของข้อมูลไบต์แต่ละขนาด 803 00:41:49,370 --> 00:41:53,840 ยาวจากกระแสชี้ไป สตรีมเก็บไว้ในสถานที่ 804 00:41:53,840 --> 00:41:56,170 ที่ได้รับจากตัวชี้. " 805 00:41:56,170 --> 00:41:57,960 >> ดังนั้นสี่ข้อโต้แย้ง 806 00:41:57,960 --> 00:42:04,510 ทำไมฉันจึงไม่เพียงแค่คัดลอกนี้ และวางไว้ที่นี่ 807 00:42:04,510 --> 00:42:10,060 808 00:42:10,060 --> 00:42:10,770 ตกลง 809 00:42:10,770 --> 00:42:13,673 ดังนั้นผู้ที่สามารถเริ่มต้นการกรอก ข้อโต้แย้งเหล่านี้สำหรับฉันหรือไม่ 810 00:42:13,673 --> 00:42:15,840 avi 811 00:42:15,840 --> 00:42:17,720 >> AVI: จะออกเป็นโมฆะ 812 00:42:17,720 --> 00:42:20,530 เพียงแค่ใส่ src 813 00:42:20,530 --> 00:42:23,142 จะออกตัวชี้และดาว 814 00:42:23,142 --> 00:42:26,102 ใส่ src 815 00:42:26,102 --> 00:42:27,050 - แล้ว 816 00:42:27,050 --> 00:42:28,500 >> เจสัน Hirschhorn: ดังนั้นฉันจะหยุด คุณไปที่นั่นเพราะที่ไม่ถูกต้อง 817 00:42:28,500 --> 00:42:32,590 818 00:42:32,590 --> 00:42:34,710 คุณขวาด้วย src แต่ ที่ src ควรจะไป? 819 00:42:34,710 --> 00:42:35,960 >> [VOICES interposing] 820 00:42:35,960 --> 00:42:38,976 821 00:42:38,976 --> 00:42:41,610 >> เจสัน Hirschhorn: มันควรจะเป็น ไปกว่าที่นี่ 822 00:42:41,610 --> 00:42:43,790 ที่ src - src ของเราเป็นชนิด 823 00:42:43,790 --> 00:42:44,610 ลองดูที่นี่ 824 00:42:44,610 --> 00:42:49,610 นี้จะขอ * ประเภทไฟล์เรา จริงมักจะเห็นพวกเขาเช่นนั้น 825 00:42:49,610 --> 00:42:57,630 ดังนั้นนี่จะขอโต้แย้งของ ประเภท FILE * กระแสเรียกที่เป็น src 826 00:42:57,630 --> 00:42:58,480 OK? 827 00:42:58,480 --> 00:43:00,410 >> ขนาดอะไรในสิ่งที่ทำ เราต้องการที่จะอ่าน 828 00:43:00,410 --> 00:43:03,340 ฉันให้คุณนี้ใน คำอธิบายปัญหา 829 00:43:03,340 --> 00:43:04,370 >> นักเรียน 24: หนึ่งไบต์ในเวลา 830 00:43:04,370 --> 00:43:05,340 >> เจสัน Hirschhorn: หนึ่งไบต์ 831 00:43:05,340 --> 00:43:08,205 วิธีการใหญ่ไบต์คืออะไร 832 00:43:08,205 --> 00:43:11,642 ขนาดของมันที่อยู่ในไบต์ดังนั้นสิ่งที่ ฉันสามารถวางที่นั่น 833 00:43:11,642 --> 00:43:12,910 >> นักเรียน 25: หนึ่ง 834 00:43:12,910 --> 00:43:14,730 >> เจสัน Hirschhorn: หนึ่ง 835 00:43:14,730 --> 00:43:17,020 ขวา 836 00:43:17,020 --> 00:43:19,940 ขนาดของมันจะอยู่ในหน่วยไบต์ ดังนั้น 1 เป็น 1 ไบต์ 837 00:43:19,940 --> 00:43:22,284 ฉันไม่กี่ต้องการที่จะอ่านในเวลา 838 00:43:22,284 --> 00:43:23,520 >> นักเรียน 26: หนึ่ง? 839 00:43:23,520 --> 00:43:24,270 >> เจสัน Hirschhorn: สิ่งหนึ่งที่ 840 00:43:24,270 --> 00:43:28,540 ฉันต้องการที่จะอ่านสิ่งหนึ่งที่มีขนาด 1 หนึ่งกัดในเวลา 841 00:43:28,540 --> 00:43:32,110 และฉันจะใส่มันเมื่อฉันอ่านมันได้หรือไม่ 842 00:43:32,110 --> 00:43:35,050 843 00:43:35,050 --> 00:43:36,510 >> นักเรียน 27: ปลายทาง? 844 00:43:36,510 --> 00:43:39,270 >> เจสัน Hirschhorn: ดังนั้นผมจึงไม่สามารถใส่ มันตรงเข้ามาในหัวข้อ 845 00:43:39,270 --> 00:43:40,800 >> นักเรียน 28: คุณจะใส่ มันเป็นตัวชี้ที่สาม 846 00:43:40,800 --> 00:43:41,780 >> นักเรียน 27: เพื่อไปยังจุดหมาย 847 00:43:41,780 --> 00:43:42,270 >> เจสัน Hirschhorn: OK 848 00:43:42,270 --> 00:43:42,630 ใช่ 849 00:43:42,630 --> 00:43:46,820 >> นักเรียน 29: คุณสามารถประกาศสิ่งที่จะ ทำหน้าที่เป็นที่เก็บชั่วคราวก่อนหน้านี้ 850 00:43:46,820 --> 00:43:47,350 >> เจสัน Hirschhorn: OK 851 00:43:47,350 --> 00:43:50,080 ให้ฉันที่ 852 00:43:50,080 --> 00:43:53,930 >> นักเรียน 29: ไฟล์อีก ชี้อาจจะ? 853 00:43:53,930 --> 00:43:54,220 >> เจสัน Hirschhorn: OK 854 00:43:54,220 --> 00:43:55,585 ดังนั้นนี่คือดาวเป็นโมฆะ - 855 00:43:55,585 --> 00:43:57,750 ก็ชนิดโมฆะดาวดังนั้นมันไม่ได้ จะต้องมีตัวชี้แฟ้ม 856 00:43:57,750 --> 00:44:02,520 และถ้าฉันอ่านหนึ่งไบต์ ที่จะเป็นสถานที่ที่ดี 857 00:44:02,520 --> 00:44:03,850 ในการจัดเก็บหนึ่งไบต์? 858 00:44:03,850 --> 00:44:04,660 >> นักเรียน 29: อาร์เรย์? 859 00:44:04,660 --> 00:44:05,770 >> เจสัน Hirschhorn อาร์เรย์ 860 00:44:05,770 --> 00:44:07,730 ตกลง 861 00:44:07,730 --> 00:44:14,040 และอะไรคือสิ่งที่เป็น เพียงแค่ขนาดหนึ่งไบต์? 862 00:44:14,040 --> 00:44:16,980 863 00:44:16,980 --> 00:44:18,060 >> นักเรียน 30: char *? 864 00:44:18,060 --> 00:44:18,530 >> นักเรียน 29: ใช่ 865 00:44:18,530 --> 00:44:19,880 >> เจสัน Hirschhorn: ถ่าน * ไม่ได้เป็นหนึ่งไบต์ 866 00:44:19,880 --> 00:44:20,440 >> นักเรียน 29: ถ่าน 867 00:44:20,440 --> 00:44:21,810 >> เจสัน Hirschhorn: ถ่านเป็นหนึ่งไบต์ 868 00:44:21,810 --> 00:44:22,920 ใช่มั้ย? 869 00:44:22,920 --> 00:44:26,740 ดังนั้นขอเรียกบัฟเฟอร์นี้เป็นทั่วไป ชื่อที่ใช้สิ่งเหล่านี้ในการจัดเก็บ 870 00:44:26,740 --> 00:44:27,910 สิ่งชั่วคราว 871 00:44:27,910 --> 00:44:30,880 ดังนั้นผมจึงสร้างบัฟเฟอร์ 872 00:44:30,880 --> 00:44:31,150 ใช่มั้ย? 873 00:44:31,150 --> 00:44:32,990 แต่จะใช้เวลาเป็นโมฆะ * 874 00:44:32,990 --> 00:44:38,660 ดังนั้นบางทีคุณมีสิทธิที่จะ ควรจะเป็นกันชนขนาด 0 875 00:44:38,660 --> 00:44:41,070 ดังนั้นจะเก็บหนึ่ง - 876 00:44:41,070 --> 00:44:41,280 ขวา 877 00:44:41,280 --> 00:44:43,560 >> เพราะตอนนี้ที่นี่ - ถ่าน บัฟเฟอร์เป็นตัวละคร แต่ 878 00:44:43,560 --> 00:44:45,110 นี้จะเป็นโมฆะ * - 879 00:44:45,110 --> 00:44:45,870 ตัวชี้ 880 00:44:45,870 --> 00:44:50,640 ดังนั้นผมสามารถทำเช่นนี้และตอนนี้ บัฟเฟอร์เป็นตัวชี้ 881 00:44:50,640 --> 00:44:53,214 อะไรที่ฉันจะทำอย่างไร 882 00:44:53,214 --> 00:44:55,775 >> นักเรียน 31: ใส่ดาวถัดจากถ่าน 883 00:44:55,775 --> 00:44:58,380 >> เจสัน Hirschhorn: ฉันสามารถ ได้สร้างมันถ่าน * 884 00:44:58,380 --> 00:45:00,216 ตกลง 885 00:45:00,216 --> 00:45:03,131 อะไรเป็นสิ่งที่ฉันสามารถทำอื่นได้หรือไม่ 886 00:45:03,131 --> 00:45:04,050 หรือให้เป็นไปด้วยนี้ 887 00:45:04,050 --> 00:45:05,740 char * บัฟเฟอร์ดังนั้นสิ่งที่ ฉันจะใส่ในที่นี่ 888 00:45:05,740 --> 00:45:08,290 889 00:45:08,290 --> 00:45:09,310 >> นักเรียน 31: บัฟเฟอร์ 890 00:45:09,310 --> 00:45:10,560 >> เจสัน Hirschhorn: บัฟเฟอร์ 891 00:45:10,560 --> 00:45:12,640 892 00:45:12,640 --> 00:45:14,500 บัฟเฟอร์ตัวชี้ไปยังถ่าน 893 00:45:14,500 --> 00:45:19,480 และอยู่ในตำแหน่งที่เรากำลังวาง หนึ่งไบต์ของสิ่งที่เราได้อ่าน 894 00:45:19,480 --> 00:45:19,980 ใช่ 895 00:45:19,980 --> 00:45:20,700 avi 896 00:45:20,700 --> 00:45:21,230 >> AVI: เพียงคำถามอย่างรวดเร็ว 897 00:45:21,230 --> 00:45:24,440 คุณต้องการที่จะ malloc บัฟเฟอร์? 898 00:45:24,440 --> 00:45:25,930 >> เจสัน Hirschhorn: ใครสามารถ ตอบคำถามที่ 899 00:45:25,930 --> 00:45:30,210 >> นักเรียน 32: ดีมันไม่ได้จริงๆ ชี้ไปที่อะไรตอนนี้ดังนั้น - 900 00:45:30,210 --> 00:45:32,610 >> เจสัน Hirschhorn: แต่ทำ เราต้องการที่จะ malloc มันได้หรือไม่ 901 00:45:32,610 --> 00:45:35,600 >> นักเรียน 32: ถ้าคุณได้ทำมันที่ วิธีที่ผมคิดว่าใช่เพราะคุณจะต้อง 902 00:45:35,600 --> 00:45:36,990 สถานที่ที่มันจะชี้ไปที่บาง 903 00:45:36,990 --> 00:45:38,350 >> เจสัน Hirschhorn: เรา ต้อง malloc มันได้หรือไม่ 904 00:45:38,350 --> 00:45:40,580 >> นักเรียน 33: หากคุณกำลังจะ ใช้มันนอกวง 905 00:45:40,580 --> 00:45:42,524 >> เจสัน Hirschhorn: พวกเราจะไป ใช้มันนอกวงหรือไม่ 906 00:45:42,524 --> 00:45:44,392 >> นักเรียน 34: ใช่ 907 00:45:44,392 --> 00:45:44,860 >> นักเรียน 35: รอ 908 00:45:44,860 --> 00:45:46,980 เราต้องการที่จะประกาศว่า ในวงที่จะเกินหรือไม่ 909 00:45:46,980 --> 00:45:50,100 >> เจสัน Hirschhorn: ดังนั้นผมคิดว่าเรามี หลอกบางวงในขณะที่นี่ว่าเรา 910 00:45:50,100 --> 00:45:51,950 พยายามที่จะคิดออกว่า เรายังไม่ได้อากาศไปยัง 911 00:45:51,950 --> 00:45:54,710 912 00:45:54,710 --> 00:45:56,010 เราไม่จำเป็นต้อง malloc มัน 913 00:45:56,010 --> 00:45:59,310 เรากำลังทำงานอยู่ในหลักก็เพียงจะ เพื่อนำไปใช้ในวงนี้ 914 00:45:59,310 --> 00:46:00,540 มันไม่จำเป็นที่จะต้องมีอยู่ นอกนี้ 915 00:46:00,540 --> 00:46:02,340 >> เพื่อที่จะสามารถตัวแปรท้องถิ่น 916 00:46:02,340 --> 00:46:03,925 คุณมีตัวชี้ไปยัง ตัวแปรท้องถิ่น 917 00:46:03,925 --> 00:46:07,984 918 00:46:07,984 --> 00:46:09,590 >> นักเรียน 36: แต่มันก็ไม่ได้ ชี้ไปที่อะไร 919 00:46:09,590 --> 00:46:11,540 >> เจสัน Hirschhorn: ไม่มีก็ไม่ได้ เริ่มต้นกับสิ่งใด 920 00:46:11,540 --> 00:46:12,790 แต่เราจะไม่ใช้มันยัง 921 00:46:12,790 --> 00:46:15,300 เราจะนำสิ่งที่อยู่ใน มันเป็นครั้งแรกที่เราใช้มัน 922 00:46:15,300 --> 00:46:16,580 เพื่อให้ดูเหมือนว่าตกลง 923 00:46:16,580 --> 00:46:17,780 ดังนั้นเราจึงไม่จำเป็นต้อง malloc ที่นี่ 924 00:46:17,780 --> 00:46:19,360 และฉันคิดว่ามันโอเคเป็น 925 00:46:19,360 --> 00:46:24,350 926 00:46:24,350 --> 00:46:25,790 ตกลง 927 00:46:25,790 --> 00:46:27,190 ขณะนี้มีสาย fread 928 00:46:27,190 --> 00:46:28,490 ขอทำบรรทัดถัดไป 929 00:46:28,490 --> 00:46:32,984 >> ถ้าเราต้องการที่จะเขียนไปยังแฟ้มสิ่งที่เป็น ฟังก์ชั่นที่ดีที่จะใช้ในการทำเช่นนั้น 930 00:46:32,984 --> 00:46:33,770 >> นักเรียน 37: fwrite? 931 00:46:33,770 --> 00:46:35,140 >> นักเรียน 38: fprintf? 932 00:46:35,140 --> 00:46:36,010 >> เจสัน Hirschhorn: fprintf เป็นหนึ่งใน 933 00:46:36,010 --> 00:46:37,260 อะไรอีกหรือไม่ 934 00:46:37,260 --> 00:46:37,680 >> นักเรียน 39: fwrite 935 00:46:37,680 --> 00:46:38,510 >> เจสัน Hirschhorn: fwrite 936 00:46:38,510 --> 00:46:41,250 และสำหรับวัตถุประสงค์ของเรา fwrite, ซึ่งเราได้เห็นที่นี่เป็น 937 00:46:41,250 --> 00:46:42,500 น่าจะเป็นทางเลือกที่ดี 938 00:46:42,500 --> 00:46:51,970 939 00:46:51,970 --> 00:46:53,950 มันใช้เวลาสี่ขัดแย้งได้เป็นอย่างดี 940 00:46:53,950 --> 00:46:57,570 Nishant คุณสามารถให้ ฉันขัดแย้งหรือไม่ 941 00:46:57,570 --> 00:47:00,570 >> Nishant: กำลังคนแรกของ จะเป็นเพียงบัฟเฟอร์ 942 00:47:00,570 --> 00:47:02,210 >> เจสัน Hirschhorn: OK 943 00:47:02,210 --> 00:47:06,752 >> Nishant: สองหนึ่ง ก็จะเป็น 1 944 00:47:06,752 --> 00:47:09,510 หนึ่งในสามเป็นไปได้ 1 945 00:47:09,510 --> 00:47:11,470 และหนึ่งในสี่เป็นไปได้ dst 946 00:47:11,470 --> 00:47:18,010 947 00:47:18,010 --> 00:47:19,550 >> เจสัน Hirschhorn: ไม่มีใครมี คำถามใด ๆ เกี่ยวกับเส้นที่ 948 00:47:19,550 --> 00:47:28,370 949 00:47:28,370 --> 00:47:29,130 ที่ดูดี 950 00:47:29,130 --> 00:47:29,590 ตกลง 951 00:47:29,590 --> 00:47:34,250 ดังนั้นตอนนี้ดูเหมือนว่าสิ่งหนึ่งที่เรากำลัง ที่หายไป - จริงให้เขียน 952 00:47:34,250 --> 00:47:35,090 บรรทัดสุดท้ายนี้ 953 00:47:35,090 --> 00:47:36,300 ปิดไฟล์ 954 00:47:36,300 --> 00:47:38,880 ที่สามารถเสร็จเราเขียน เหล่านี้สองบรรทัดสุดท้าย? 955 00:47:38,880 --> 00:47:39,120 ใช่ 956 00:47:39,120 --> 00:47:39,850 ขออภัยสิ่งที่ชื่อของคุณหรือไม่ 957 00:47:39,850 --> 00:47:40,580 >> ลูซี่ลูซี่ 958 00:47:40,580 --> 00:47:41,580 >> เจสัน Hirschhorn: ลูซี่ 959 00:47:41,580 --> 00:47:47,560 >> ลูซี่ src fclose แล้ว หัวข้อ fclose 960 00:47:47,560 --> 00:47:52,430 >> เจสัน Hirschhorn: fclose, วงเล็บเปิด src, paren ปิดอัฒภาค 961 00:47:52,430 --> 00:47:53,680 และ fclose - 962 00:47:53,680 --> 00:47:57,560 963 00:47:57,560 --> 00:47:58,090 ใช่? 964 00:47:58,090 --> 00:48:01,710 >> ลูซี่เปิดวงเล็บ dst และอัฒภาคแล้ว 965 00:48:01,710 --> 00:48:02,520 >> เจสัน Hirschhorn: Great 966 00:48:02,520 --> 00:48:04,338 และสิ่งที่ฉันควรจะมีที่สิ้นสุดหรือไม่ 967 00:48:04,338 --> 00:48:05,210 >> ลูซี่กลับ 0 968 00:48:05,210 --> 00:48:05,570 >> เจสัน Hirschhorn: กลับ 0 969 00:48:05,570 --> 00:48:06,820 ฉันต้อง? 970 00:48:06,820 --> 00:48:10,560 971 00:48:10,560 --> 00:48:12,590 เพียงคำถาม 972 00:48:12,590 --> 00:48:14,957 เราจะต้องมีการกลับ 0? 973 00:48:14,957 --> 00:48:16,240 >> นักเรียนหลาย: เลขที่ 974 00:48:16,240 --> 00:48:16,430 >> เจสัน Hirschhorn: เลขที่ 975 00:48:16,430 --> 00:48:18,090 หลักไม่ได้โดยอัตโนมัติ ถ้าคุณได้รับการสิ้นสุด 976 00:48:18,090 --> 00:48:20,580 แต่ผมคิดว่ามันเป็นที่ดีที่จะ รวมไว้อย่างชัดเจน 977 00:48:20,580 --> 00:48:23,860 โดยเฉพาะอย่างยิ่งเมื่อเรากำลังจะกลับมาอีก สิ่งที่ตลอดโปรแกรม 978 00:48:23,860 --> 00:48:24,810 ตกลง 979 00:48:24,810 --> 00:48:26,230 นี่คือสิ่งที่เราหายไป - 980 00:48:26,230 --> 00:48:28,520 ในขณะที่สิ่งที่ 981 00:48:28,520 --> 00:48:31,630 ใครจะคิดว่าบาง - 982 00:48:31,630 --> 00:48:35,240 มีความรู้สึกของบางสิ่ง อาจจะไปอยู่ที่นั่น? 983 00:48:35,240 --> 00:48:37,350 แม้ว่าจะเป็นเพียงในบาง pseudocode เช่นภาษา? 984 00:48:37,350 --> 00:48:41,330 >> สิ่งที่เป็นเราจริงๆ - สิ่งที่ เราต้องการที่จะไปจนกว่า? 985 00:48:41,330 --> 00:48:41,980 ใช่ลูซี่ 986 00:48:41,980 --> 00:48:43,240 >> ลูซี่ท้ายของแฟ้ม 987 00:48:43,240 --> 00:48:44,990 >> เจสัน Hirschhorn: จุดสิ้นสุดของแฟ้ม 988 00:48:44,990 --> 00:48:49,280 ดังนั้นสิ่งที่คุณหมายถึงโดยจุดสิ้นสุดของไฟล์ 989 00:48:49,280 --> 00:48:50,955 >> ลูซี่เมื่อคุณเข้าถึง ส่วนท้ายของแฟ้มหยุด 990 00:48:50,955 --> 00:48:51,240 >> เจสัน Hirschhorn: OK 991 00:48:51,240 --> 00:48:53,460 ดังนั้นเมื่อเราถึงจุดสิ้นสุดของแฟ้ม 992 00:48:53,460 --> 00:48:56,893 เราจะรู้ได้อย่างไรเมื่อเราได้มาถึง ในตอนท้ายของไฟล์หรือไม่ 993 00:48:56,893 --> 00:48:59,900 >> นักเรียน 40: ผมคิดว่ากันชน จะถูกตั้งค่าเป็นศูนย์ 994 00:48:59,900 --> 00:49:01,885 >> นักเรียน 41: บัฟเฟอร์มีการประกาศ ภายในวง 995 00:49:01,885 --> 00:49:03,670 >> เจสัน Hirschhorn: ดังนั้นคุณคิดว่า บัฟเฟอร์จะถูกตั้งค่าเป็นศูนย์ 996 00:49:03,670 --> 00:49:05,850 ทำไมจะบัฟเฟอร์ถูกตั้งค่าเป็น NULL? 997 00:49:05,850 --> 00:49:10,420 >> นักเรียน 40: เพราะเมื่อคุณ fread คุณกำลังพยายามที่จะนำ 998 00:49:10,420 --> 00:49:13,528 ไม่มีอะไรเป็นกันชน 999 00:49:13,528 --> 00:49:13,980 >> เจสัน Hirschhorn: OK 1000 00:49:13,980 --> 00:49:15,550 ดังนั้นคุณกำลังคิด fread - 1001 00:49:15,550 --> 00:49:19,000 เมื่อเราได้มาถึงจุดสิ้นสุดของ แฟ้มสิ่งที่ fread จะทำอย่างไร 1002 00:49:19,000 --> 00:49:21,230 ผมคิดว่าเป็นคำถาม เราต้องคิดออก 1003 00:49:21,230 --> 00:49:21,960 สิ่งที่ไม่ fread ทำอย่างไร 1004 00:49:21,960 --> 00:49:25,640 ที่ไม่ได้ใส่โมฆะในบัฟเฟอร์หรือ ที่ไม่ได้ทำสิ่งอื่นใด 1005 00:49:25,640 --> 00:49:27,510 วิธีที่เราสามารถคิดออกสิ่งที่มันไม่? 1006 00:49:27,510 --> 00:49:28,190 >> นักเรียน 42: คน 1007 00:49:28,190 --> 00:49:28,810 >> เจสัน Hirschhorn: คน 1008 00:49:28,810 --> 00:49:32,280 เพื่อให้ดูมากกว่าที่นี่ 1009 00:49:32,280 --> 00:49:34,000 ค่าตอบแทน 1010 00:49:34,000 --> 00:49:39,620 ในความสำเร็จ fread และ fwrite กลับ จำนวนรายการที่อ่านหรือเขียน 1011 00:49:39,620 --> 00:49:43,700 หมายเลขนี้เท่ากับจำนวนของไบต์ โอนเฉพาะเมื่อขนาด 1 1012 00:49:43,700 --> 00:49:47,780 หากมีข้อผิดพลาดเกิดขึ้นหรือจุดสิ้นสุดของ แฟ้มจะถึงค่าตอบแทนเ​​ป็น 1013 00:49:47,780 --> 00:49:51,490 นับรายการสั้นหรือ 0 1014 00:49:51,490 --> 00:49:57,860 >> ดังนั้นสำหรับวัตถุประสงค์ของเราถ้าถึง fread ในตอนท้ายของไฟล์และอ่านจาก 1015 00:49:57,860 --> 00:50:02,100 ส่วนท้ายของแฟ้มที่มีอะไรเหลือเป็น การอ่านสิ่งที่มันจะกลับมา? 1016 00:50:02,100 --> 00:50:03,290 >> นักเรียน 43: ศูนย์? 1017 00:50:03,290 --> 00:50:04,540 >> เจสัน Hirschhorn: อะไรนะ? 1018 00:50:04,540 --> 00:50:05,300 >> นักเรียน 43: ศูนย์? 1019 00:50:05,300 --> 00:50:05,690 >> เจสัน Hirschhorn: ศูนย์ 1020 00:50:05,690 --> 00:50:06,940 มันจะกลับเป็นศูนย์ 1021 00:50:06,940 --> 00:50:09,360 1022 00:50:09,360 --> 00:50:13,010 เพื่อให้เรารู้ fread ว่าเมื่อเราได้ ถึงจุดสิ้นสุดของไฟล์ที่เป็นไป 1023 00:50:13,010 --> 00:50:13,690 เพื่อกลับไปเป็นศูนย์ 1024 00:50:13,690 --> 00:50:17,460 วิธีการที่เราสามารถใช้ที่เพื่อประโยชน์ของเราหรือไม่ 1025 00:50:17,460 --> 00:50:21,733 >> AVI: คุณสามารถประกาศตัวแปรภายนอก ของวงที่เรียกว่าการตรวจสอบ 1026 00:50:21,733 --> 00:50:27,040 หากตร​​วจสอบเท่ากับ - 1027 00:50:27,040 --> 00:50:28,190 สำหรับวันนี้ - หนึ่ง 1028 00:50:28,190 --> 00:50:28,920 >> เจสัน Hirschhorn: OK 1029 00:50:28,920 --> 00:50:38,050 >> AVI: และจากนั้นคุณสามารถใส่ IF งบขวาหลังจาก fread บอกว่าถ้า 1030 00:50:38,050 --> 00:50:42,600 fread เท่ากับศูนย์ - 1031 00:50:42,600 --> 00:50:43,850 ไม่ 1032 00:50:43,850 --> 00:50:46,002 1033 00:50:46,002 --> 00:50:47,252 >> เจสัน Hirschhorn: ใคร สามารถช่วย Avi ออก 1034 00:50:47,252 --> 00:50:49,690 1035 00:50:49,690 --> 00:50:52,410 >> AVI: อะไรคือค่า ส่งกลับโดย fread? 1036 00:50:52,410 --> 00:50:54,060 >> เจสัน Hirschhorn: เราเพียงแค่ เดินไปที่ 1037 00:50:54,060 --> 00:50:55,450 >> AVI: คุณเป็นตัวแทนของมันได้อย่างไร 1038 00:50:55,450 --> 00:50:57,190 >> เจสัน Hirschhorn: ดังนั้นมันกลับ - ขอ ดูได้ที่นี่ - มันกลับ 1039 00:50:57,190 --> 00:50:59,340 size_t ซึ่งเป็นหลัก จำนวนเต็ม 1040 00:50:59,340 --> 00:51:02,240 1041 00:51:02,240 --> 00:51:03,410 ดังนั้นมันกลับจำนวนเต็ม 1042 00:51:03,410 --> 00:51:05,160 และในกรณีของเราก็จะ กลับ 1 หรือ 0 - 1043 00:51:05,160 --> 00:51:08,760 1 ถ้าอ่านสิ่งหนึ่ง - หนึ่งไบต์ และ 0 ถ้าเราได้ถึงจุดสิ้นสุด 1044 00:51:08,760 --> 00:51:13,560 1045 00:51:13,560 --> 00:51:16,450 ดังนั้นหาก fread - 1046 00:51:16,450 --> 00:51:16,855 ใช่? 1047 00:51:16,855 --> 00:51:20,330 >> นักเรียน 45: คุณไม่สามารถเพียงแค่ใส่เต็ม fread (บัฟเฟอร์, 1, 1, src) ลงใน 1048 00:51:20,330 --> 00:51:21,660 ในขณะที่ห่วง? 1049 00:51:21,660 --> 00:51:26,510 >> เจสัน Hirschhorn: ดังนั้นคุณเสนอ การทำเช่นนี้เป็นมี 1050 00:51:26,510 --> 00:51:27,600 >> [VOICES interposing] 1051 00:51:27,600 --> 00:51:29,520 >> เจสัน Hirschhorn: ยึดมั่นใน 1052 00:51:29,520 --> 00:51:30,885 ดังนั้นเรา ridding ของที่ 1053 00:51:30,885 --> 00:51:33,300 ดังนั้นคุณเสนอวาง fread เข้าไปมี? 1054 00:51:33,300 --> 00:51:35,457 สิ่งที่เราควรจะย้าย ถ้าคุณต้องการที่จะทำเช่นนั้น 1055 00:51:35,457 --> 00:51:36,740 >> นักเรียน 45: บัฟเฟอร์นอก 1056 00:51:36,740 --> 00:51:38,110 >> เจสัน Hirschhorn: เราควร ยังย้ายนี้ออกจากที่นี่ 1057 00:51:38,110 --> 00:51:41,700 >> นักเรียน 45: แต่ไม่ว่าอย่างต่อเนื่อง ย้ายไปข้างหน้า 1058 00:51:41,700 --> 00:51:42,950 >> [VOICES interposing] 1059 00:51:42,950 --> 00:51:46,540 1060 00:51:46,540 --> 00:51:47,470 >> เจสัน Hirschhorn: OK 1061 00:51:47,470 --> 00:51:50,570 ดังนั้นนี่คือสิ่ง Okshar เสนอ 1062 00:51:50,570 --> 00:51:51,930 เราสร้างบัฟเฟอร์ของเรา 1063 00:51:51,930 --> 00:51:57,020 ในขณะที่เรา fread แล้วเรา fwrite 1064 00:51:57,020 --> 00:51:59,760 ความคิดเกี่ยวกับเรื่องนี้? 1065 00:51:59,760 --> 00:52:04,050 >> นักเรียน 46: คำถามเดียวของฉันคือจะ มันจริง fread รันคำสั่งหรือไม่ 1066 00:52:04,050 --> 00:52:06,175 >> เจสัน Hirschhorn: Great คำถาม 1067 00:52:06,175 --> 00:52:11,050 เมื่อคุณวางสายงาน ภายในสภาพไม่ว่า 1068 00:52:11,050 --> 00:52:12,300 การเรียกใช้ฟังก์ชันรัน 1069 00:52:12,300 --> 00:52:15,760 1070 00:52:15,760 --> 00:52:17,770 เราได้เห็นตัวอย่างของการนี​​้มาก่อน 1071 00:52:17,770 --> 00:52:24,900 1072 00:52:24,900 --> 00:52:25,660 ใช่มั้ย? 1073 00:52:25,660 --> 00:52:26,125 >> นักเรียน 46: ตกลง 1074 00:52:26,125 --> 00:52:26,590 ใช่ 1075 00:52:26,590 --> 00:52:30,140 จึงไม่ดำเนินการ 1076 00:52:30,140 --> 00:52:31,790 >> เจสัน Hirschhorn: เราได้เห็นสิ่งที่ เช่นว่าก่อนที่เรามี 1077 00:52:31,790 --> 00:52:33,550 การเรียกใช้ฟังก์ชันภายในของสภาพ 1078 00:52:33,550 --> 00:52:35,540 ไม่เรียกใช้ฟังก์ชันที่รัน 1079 00:52:35,540 --> 00:52:36,350 ใช่ 1080 00:52:36,350 --> 00:52:37,410 ดังนั้นคำตอบคือใช่ 1081 00:52:37,410 --> 00:52:41,010 การเรียกใช้ฟังก์ชันนี้จะดำเนินการ 1082 00:52:41,010 --> 00:52:42,418 แต่อีกครั้งก็เป็นสิ่งที่เราต้องการได้หรือไม่ 1083 00:52:42,418 --> 00:52:49,250 1084 00:52:49,250 --> 00:52:52,204 >> สิ่งที่เป็นวิธีหนึ่งที่เราสามารถคิด ว่ามันคือสิ่งที่เราต้องการได้หรือไม่ 1085 00:52:52,204 --> 00:52:53,470 >> นักเรียนหลาย: เรียกใช้มันได้หรือไม่ 1086 00:52:53,470 --> 00:52:54,460 >> เจสัน Hirschhorn: เราสามารถเรียกใช้มัน 1087 00:52:54,460 --> 00:52:57,500 แต่ก่อนที่เราจะทำอย่างไรที่เราจะทำได้ นอกจากนี้ยังมีเหตุผลผ่านทางนี้ 1088 00:52:57,500 --> 00:52:57,920 ถ้า - 1089 00:52:57,920 --> 00:53:01,920 ว่าเรามีหนึ่งไบต์ในของเรา ไฟล์เราจะให้ที่นี่ 1090 00:53:01,920 --> 00:53:02,660 เราจะให้รหัสนี้ 1091 00:53:02,660 --> 00:53:03,620 นี้จะทำงาน 1092 00:53:03,620 --> 00:53:07,780 fread จะกลับหนึ่งไบต์และ เก็บไว้ในบัฟเฟอร์ 1093 00:53:07,780 --> 00:53:11,290 และจะประเมินถึง 1, ขวาหลังจากที่เขากลับมาที่ 1 1094 00:53:11,290 --> 00:53:12,640 >> ดังนั้นในขณะที่ 1 1095 00:53:12,640 --> 00:53:15,325 ไม่ว่าหมายถึงรหัสภายใน วงในขณะที่จะรัน 1096 00:53:15,325 --> 00:53:15,453 >> นักเรียน 47: ใช่ 1097 00:53:15,453 --> 00:53:16,040 มันเป็นความจริง 1098 00:53:16,040 --> 00:53:16,290 >> เจสัน Hirschhorn: ใช่ 1099 00:53:16,290 --> 00:53:17,490 1 เป็นความจริง 1100 00:53:17,490 --> 00:53:18,240 มันไม่ 0 1101 00:53:18,240 --> 00:53:20,360 ดังนั้นรหัสภายในที่นี่จะดำเนินการ 1102 00:53:20,360 --> 00:53:22,300 ดังนั้นเราจะเขียนว่า 1103 00:53:22,300 --> 00:53:25,340 เราจะย้ายกลับไปนี้ สายอีกครั้ง 1104 00:53:25,340 --> 00:53:26,850 ตอนนี้เรามี - 1105 00:53:26,850 --> 00:53:28,550 เราอยู่ที่ส่วนท้ายของแฟ้มของเรา 1106 00:53:28,550 --> 00:53:30,980 เราอ่านจากจุดสิ้นสุดของไฟล์ของเรา เพราะเรามีเพียงหนึ่งไบต์ในนั้น 1107 00:53:30,980 --> 00:53:34,270 >> fread กลับ 0 ร้านค้า บางสิ่งบางอย่างในบัฟเฟอร์ 1108 00:53:34,270 --> 00:53:35,890 ฉันสุจริตไม่ทราบว่าสิ่งที่ จะเก็บในบัฟเฟอร์ 1109 00:53:35,890 --> 00:53:38,380 เราอาจจะมองขึ้นไป เพื่อดูสิ่งที่มันไม่ 1110 00:53:38,380 --> 00:53:40,130 ที่ฉันสุจริตไม่ทราบว่า 1111 00:53:40,130 --> 00:53:43,090 เราไม่ทราบที่ใส่ใจสิ่งที่ จะเก็บในบัฟเฟอร์? 1112 00:53:43,090 --> 00:53:44,010 แต่มันก็ไม่กลับ 0 1113 00:53:44,010 --> 00:53:45,440 และจะดำเนินการในขณะที่ 0? 1114 00:53:45,440 --> 00:53:49,950 1115 00:53:49,950 --> 00:53:51,180 >> ในขณะที่ 0 จะไม่ดำเนินการ 1116 00:53:51,180 --> 00:53:54,030 ดังนั้นแล้วเราจะย้ายไปลงที่นี่ 1117 00:53:54,030 --> 00:53:58,870 จึงขอได้แสดงของมือที่ว่านี้ เป็นรหัสที่เราควรจะทำงานหรือถ้าเรา 1118 00:53:58,870 --> 00:54:00,140 ควรจะทำอย่างไรการเปลี่ยนแปลงครั้งแรก 1119 00:54:00,140 --> 00:54:02,180 ดังนั้นถ้าคุณคิดว่า - คุณมีการลงคะแนนเสียง 1120 00:54:02,180 --> 00:54:06,885 หากคุณคิดว่าเราควรเรียกใช้รหัสนี้ ตามที่เป็นอยู่โปรดยกมือของคุณ 1121 00:54:06,885 --> 00:54:12,440 1122 00:54:12,440 --> 00:54:13,400 >> ตกลง 1123 00:54:13,400 --> 00:54:14,315 มีหนึ่ง - 1124 00:54:14,315 --> 00:54:17,260 คุณมีคำถามความกังวล? 1125 00:54:17,260 --> 00:54:18,080 ใช่ 1126 00:54:18,080 --> 00:54:21,240 >> นักเรียน 48: หลังจากที่เราย้ายบัฟเฟอร์ นอกวงเราทำ 1127 00:54:21,240 --> 00:54:22,670 ต้อง malloc มันได้หรือไม่ 1128 00:54:22,670 --> 00:54:23,310 >> เจสัน Hirschhorn: Great คำถาม 1129 00:54:23,310 --> 00:54:26,670 หลังจากที่เราย้ายไปที่ด้านนอกของกันชน วงเราจะต้อง malloc มันได้หรือไม่ 1130 00:54:26,670 --> 00:54:28,400 นี่คือคำถามที่ขอบเขต 1131 00:54:28,400 --> 00:54:32,130 ถ้าเราเริ่มต้น buffer นอก ของวงนี้ก็จะมีอยู่ 1132 00:54:32,130 --> 00:54:33,534 ด้านในของวงหรือไม่ 1133 00:54:33,534 --> 00:54:35,230 >> นักเรียนหลาย: ใช่ 1134 00:54:35,230 --> 00:54:35,580 >> เจสัน Hirschhorn: ใช่ 1135 00:54:35,580 --> 00:54:40,100 ขอบเขตที่ครอบคลุมด้านในของวง และจริงๆสิ่งที่อยู่ด้านล่างภายใน 1136 00:54:40,100 --> 00:54:42,460 ของรหัสนี้รวมถึง สิ่งที่อยู่ข้างในที่นี่ 1137 00:54:42,460 --> 00:54:43,930 ดังนั้นเราจึงไม่จำเป็นต้อง malloc มัน 1138 00:54:43,930 --> 00:54:47,766 มันเป็นตัวแปรท้องถิ่นและขอบเขตของ รวมถึงยังคงห่วง 1139 00:54:47,766 --> 00:54:49,540 >> นักเรียน 49: เราจำเป็นต้องที่จะเป็นอิสระได้หรือไม่ 1140 00:54:49,540 --> 00:54:51,770 >> เจสัน Hirschhorn: เรา ต้องบัฟเฟอร์ฟรีหรือเปล่า 1141 00:54:51,770 --> 00:54:53,860 >> นักเรียน 49: ใช่ถ้าเราไม่ malloc 1142 00:54:53,860 --> 00:54:55,750 >> เจสัน Hirschhorn: เรา ต้องบัฟเฟอร์ฟรีหรือเปล่า 1143 00:54:55,750 --> 00:54:57,160 ที่เราทำไม่ได้ 1144 00:54:57,160 --> 00:55:01,280 อีกครั้งก็เป็นตัวแปรท้องถิ่น ดังนั้นเราจึงไม่จำเป็นต้องเป็นอิสระ 1145 00:55:01,280 --> 00:55:02,170 ตกลง 1146 00:55:02,170 --> 00:55:03,480 ลองดูสิ่งที่เกิดขึ้น 1147 00:55:03,480 --> 00:55:17,290 1148 00:55:17,290 --> 00:55:18,220 ดังนั้นจึงเป็นสิ่งที่ไม่ได้เตรียม 1149 00:55:18,220 --> 00:55:20,830 นั่นคือสิ่งที่สิ่งที่ มาร์คัสเสนอก่อนหน้านี้ 1150 00:55:20,830 --> 00:55:25,340 ดังนั้นเราจึงมีข้อผิดพลาดที่บัฟเฟอร์ตัวแปร เป็น uninitialized เมื่อนำมาใช้ที่นี่ 1151 00:55:25,340 --> 00:55:26,590 >> วิธีที่เราสามารถแก้ไขปัญหานี้ 1152 00:55:26,590 --> 00:55:29,460 1153 00:55:29,460 --> 00:55:30,960 >> นักเรียน 50: malloc มันได้หรือไม่ 1154 00:55:30,960 --> 00:55:31,770 >> นักเรียน 51: เท่ากับโมฆะ? 1155 00:55:31,770 --> 00:55:33,000 >> นักเรียน 52: บัฟเฟอร์พูดเท่ากับโมฆะ 1156 00:55:33,000 --> 00:55:34,250 >> เจสัน Hirschhorn: OK 1157 00:55:34,250 --> 00:55:40,040 1158 00:55:40,040 --> 00:55:40,770 ดูดี 1159 00:55:40,770 --> 00:55:42,410 เรามีตอนนี้ 1160 00:55:42,410 --> 00:55:45,630 ลองสร้างสิ่งที่จะพยายามคัดลอก 1161 00:55:45,630 --> 00:56:08,990 1162 00:56:08,990 --> 00:56:10,490 ดังนั้นเราจึงมีแฟ้มข้อความของเรา 1163 00:56:10,490 --> 00:56:11,740 วิธีการที่เราสามารถเรียกใช้โปรแกรมนี้ 1164 00:56:11,740 --> 00:56:14,140 1165 00:56:14,140 --> 00:56:15,472 ใช่ 1166 00:56:15,472 --> 00:56:22,230 >> นักเรียน 53: คุณสามารถทำจุด เฉือน cp, test.txt 1167 00:56:22,230 --> 00:56:25,140 และจากนั้นคุณสามารถตั้งชื่อไฟล์อื่น ซึ่งมันจะเก็บเป็น 1168 00:56:25,140 --> 00:56:25,510 >> เจสัน Hirschhorn: OK 1169 00:56:25,510 --> 00:56:27,380 เราจะเรียกว่า out.txt 1170 00:56:27,380 --> 00:56:28,630 เย็น 1171 00:56:28,630 --> 00:56:31,700 1172 00:56:31,700 --> 00:56:34,320 ความผิด seg 1173 00:56:34,320 --> 00:56:35,570 ความคิดเกี่ยวกับความผิด seg ของหรือไม่ 1174 00:56:35,570 --> 00:56:40,900 1175 00:56:40,900 --> 00:56:41,390 นี้ดีมาก 1176 00:56:41,390 --> 00:56:45,040 วิธีที่เราสามารถหาที่ seg ​​ของความผิดคืออะไร 1177 00:56:45,040 --> 00:56:45,680 คืออะไร? 1178 00:56:45,680 --> 00:56:45,990 >> นักเรียน 54: GDB 1179 00:56:45,990 --> 00:56:47,240 >> เจสัน Hirschhorn: GDB 1180 00:56:47,240 --> 00:56:51,400 1181 00:56:51,400 --> 00:56:55,300 เราทำงานโดยการเขียน gdb gdb จุดเฉือน, ชื่อของโปรแกรมของเรา 1182 00:56:55,300 --> 00:56:57,020 ไม่มีอาร์กิวเมนต์บรรทัดคำสั่งมี 1183 00:56:57,020 --> 00:56:59,570 เรากำลังจะตั้ง จุดพักที่หลัก 1184 00:56:59,570 --> 00:57:02,190 ถ้าผมต้องการที่จะเริ่มต้น gdb สิ่งที่ฉันจะทำอย่างไร 1185 00:57:02,190 --> 00:57:02,730 >> นักเรียน 55: อาร์ 1186 00:57:02,730 --> 00:57:08,910 >> เจสัน Hirschhorn: อาร์และแล้วสิ่งที่ 1187 00:57:08,910 --> 00:57:09,400 >> นักเรียน 55: ข้อโต้แย้ง? 1188 00:57:09,400 --> 00:57:10,650 >> เจสัน Hirschhorn: แล้ว อาร์กิวเมนต์บรรทัดคำสั่ง 1189 00:57:10,650 --> 00:57:15,890 1190 00:57:15,890 --> 00:57:17,120 ลองเดินผ่าน 1191 00:57:17,120 --> 00:57:19,090 ยังไม่มีเป็นเพียงการพาผมทีละบรรทัด 1192 00:57:19,090 --> 00:57:21,450 ฉันจะไปจนกว่า ฉันจะได้รับความผิด seg ของฉัน 1193 00:57:21,450 --> 00:57:22,700 มีความผิด seg ของฉัน 1194 00:57:22,700 --> 00:57:24,960 1195 00:57:24,960 --> 00:57:27,875 ดูเหมือนว่า fread เกิด ความผิด seg ของฉัน 1196 00:57:27,875 --> 00:57:30,570 1197 00:57:30,570 --> 00:57:32,770 ฉันรู้ว่าเกิดความผิด fread seg ของฉัน เพราะเห็นว่าเป็น 1198 00:57:32,770 --> 00:57:34,950 สายเราก็ดำเนินการ 1199 00:57:34,950 --> 00:57:36,530 >> และสิ่งเดียวที่เป็น ที่เกิดขึ้นในบรรทัดที่ - 1200 00:57:36,530 --> 00:57:37,520 สองสิ่งที่เกิดขึ้น 1201 00:57:37,520 --> 00:57:40,610 fread เป็นไปแล้วเรา ทำในขณะที่บางการตรวจสอบ 1202 00:57:40,610 --> 00:57:44,820 ฉันยินดีที่จะเดิมพันว่าในขณะที่ การตรวจสอบก็ไม่ได้ก่อให้เกิดความผิด seg ของฉัน 1203 00:57:44,820 --> 00:57:46,950 ส่วนใหญ่แล้วเป็น fread ก่อให้เกิดความผิด seg ของฉัน 1204 00:57:46,950 --> 00:57:49,260 ฉันยังเห็นบางสิ่งบางอย่างที่นี่ memcopy 1205 00:57:49,260 --> 00:57:50,500 >> สำเนาหน่วยความจำ 1206 00:57:50,500 --> 00:57:53,820 เสียงเหมือนการย้ายหน่วยความจำจาก สถานที่หนึ่งไปยังอีก 1207 00:57:53,820 --> 00:57:56,890 เสียงเหมือนอะไรบางอย่างที่จะเกิดขึ้น ใน fread อาจหน่วยความจำบาง 1208 00:57:56,890 --> 00:57:58,910 ย้ายจากที่นี่ไปที่นี่ 1209 00:57:58,910 --> 00:58:01,740 1210 00:58:01,740 --> 00:58:03,860 ให้เป็นไปผ่านทางนี้อีกครั้ง 1211 00:58:03,860 --> 00:58:06,900 ฉันจะเริ่มต้นมันมากกว่า และเรียกใช้อีกครั้งหรือไม่ 1212 00:58:06,900 --> 00:58:08,092 ใช่ 1213 00:58:08,092 --> 00:58:15,140 >> นักเรียน 56: คุณจะต้องใส่ เครื่องหมายก่อนบัฟเฟอร์? 1214 00:58:15,140 --> 00:58:17,800 >> เจสัน Hirschhorn: ดังนั้นเครื่องหมายก่อน บัฟเฟอร์จะให้ฉันที่อยู่ของ 1215 00:58:17,800 --> 00:58:22,330 บัฟเฟอร์ซึ่งเป็นถ่าน * 1216 00:58:22,330 --> 00:58:25,250 ขอใช้ผ่านทางนี้อีกครั้งหนึ่ง 1217 00:58:25,250 --> 00:58:28,248 ฉันจะทำงานผ่านมันได้อีกครั้งหนึ่ง 1218 00:58:28,248 --> 00:58:29,210 >> นักเรียน 57: คุณสามารถเพียงแค่ พิมพ์ที่ทำงานอีกครั้งหรือไม่ 1219 00:58:29,210 --> 00:58:32,050 >> เจสัน Hirschhorn: เพียงพิมพ์การทำงานอีกครั้ง 1220 00:58:32,050 --> 00:58:33,415 ดังนั้นเราจะไม่ รันบรรทัดนี้ 1221 00:58:33,415 --> 00:58:36,250 1222 00:58:36,250 --> 00:58:39,240 ดังนั้นบัฟเฟอร์เป็นตัวชี้โมฆะ 1223 00:58:39,240 --> 00:58:40,490 ถูกต้องหรือไม่ 1224 00:58:40,490 --> 00:58:45,870 1225 00:58:45,870 --> 00:58:47,060 มันจะชี้ไปที่ - เรามาดู 1226 00:58:47,060 --> 00:58:48,500 ถ้าเรามีเรา - 1227 00:58:48,500 --> 00:58:50,430 วาดภาพได้อย่างรวดเร็วนี้ 1228 00:58:50,430 --> 00:58:53,500 ทุกคนสามารถดูได้ว่า ที่ผมเขียนไปที่นี่? 1229 00:58:53,500 --> 00:59:02,890 >> ดังนั้นในกองเรามีในท้องถิ่น ตัวแปรและก็เรียกว่าบัฟเฟอร์และ 1230 00:59:02,890 --> 00:59:08,230 เป็นตัวชี้ไปยังถ่าน 1231 00:59:08,230 --> 00:59:10,325 อะไรที่อยู่เป็นถ่านนี้ที่? 1232 00:59:10,325 --> 00:59:12,550 >> นักเรียน 58: 0x0 1233 00:59:12,550 --> 00:59:13,400 >> เจสัน Hirschhorn ขวา 1234 00:59:13,400 --> 00:59:14,200 นั่นคือสิ่งที่เป็น 1235 00:59:14,200 --> 00:59:17,600 ในที่นี่ภายในบัฟเฟอร์จะถูกเก็บไว้ 0x0 1236 00:59:17,600 --> 00:59:20,480 นั่นคือสิ่งที่เรามี - การตั้งค่าที่เรามีตอนนี้ 1237 00:59:20,480 --> 00:59:27,540 ดังนั้นบรรทัดนี้ fread ทำให้บางสิ่งบางอย่าง จากแหล่งที่มาอยู่ที่ไหน 1238 00:59:27,540 --> 00:59:30,560 ลงในช่องนี้หรือกล่องนี้ 1239 00:59:30,560 --> 00:59:31,060 กล่องไหน 1240 00:59:31,060 --> 00:59:33,290 กล่องหรือกล่องด้านขวาซ้าย 1241 00:59:33,290 --> 00:59:34,750 ช่องขวานี้ 1242 00:59:34,750 --> 00:59:38,440 >> มันเป็นไปตามตัวชี้ และทำให้มันอยู่ในที่นี่ 1243 00:59:38,440 --> 00:59:42,620 เมื่อเราพยายามและหน่วยความจำสัมผัสที่ สถานที่ 0, สิ่งที่เราได้รับ 1244 00:59:42,620 --> 00:59:45,050 ความผิดส่วน 1245 00:59:45,050 --> 00:59:46,550 นั่นคือความผิดพลาดที่เรามีตอนนี้ 1246 00:59:46,550 --> 00:59:46,970 ใช่ 1247 00:59:46,970 --> 00:59:48,410 >> นักเรียน 59: คุณไม่ได้ ใส่กันชนดาว? 1248 00:59:48,410 --> 00:59:49,180 หรือไม่ได้หรือไม่ 1249 00:59:49,180 --> 00:59:50,050 สำหรับ fread? 1250 00:59:50,050 --> 00:59:51,450 >> เจสัน Hirschhorn: ดังนั้น fread ใช้ตัวชี้ 1251 00:59:51,450 --> 00:59:54,920 1252 00:59:54,920 --> 00:59:55,900 ดังนั้นมันผ่านในบัฟเฟอร์ 1253 00:59:55,900 --> 00:59:58,980 และจากนั้นก็จะยกเลิกการอ้างอิง มันอยู่ที่ไหนสักแห่งภายใน fread 1254 00:59:58,980 --> 01:00:00,700 แต่อีกครั้งที่เราเห็นก็จะใช้เวลาชี้ 1255 01:00:00,700 --> 01:00:02,560 เราไม่จำเป็นที่จะผ่านมันบัฟเฟอร์ดาว 1256 01:00:02,560 --> 01:00:05,350 ที่จะผ่าน มันสิ่งที่นี่ 1257 01:00:05,350 --> 01:00:07,980 และนั่นอาจจะทำให้เรามีข้อผิดพลาด เพราะเรากำลังยกเลิกการอ้างอิงนั้น 1258 01:00:07,980 --> 01:00:08,150 >> ใช่มั้ย? 1259 01:00:08,150 --> 01:00:10,690 เมื่อเรายกเลิกการอ้างอิงตัวชี้นี้เมื่อ เราพยายามที่จะเข้าสู่ตำแหน่งนี้ 1260 01:00:10,690 --> 01:00:13,140 เราได้รับข้อผิดพลาด - ความผิดส่วนของเรา 1261 01:00:13,140 --> 01:00:15,800 ดังนั้น - 1262 01:00:15,800 --> 01:00:16,690 อุ่ย 1263 01:00:16,690 --> 01:00:19,090 เรากำลังจะออกจาก gdb 1264 01:00:19,090 --> 01:00:20,160 สายของเรา - 1265 01:00:20,160 --> 01:00:22,990 ปัญหาของเรา - ที่ถูกต้อง ที่นี่ในสายนี้ 1266 01:00:22,990 --> 01:00:26,410 และมันก็เป็นปัญหาเพราะ ของสายนี้ 1267 01:00:26,410 --> 01:00:31,780 >> วิธีที่เราสามารถสร้างกล่องที่ สามารถเข้าถึงได้ใน fread 1268 01:00:31,780 --> 01:00:31,980 ใช่มั้ย? 1269 01:00:31,980 --> 01:00:35,190 เราจำเป็นต้องสร้างกล่องที่หนึ่ง ไบต์ขนาดใหญ่ขนาดของถ่าน 1270 01:00:35,190 --> 01:00:38,590 แต่เราจำเป็นต้องกล่องที่จะสามารถเข้าถึง เมื่อฟังก์ชั่นนี้ดำเนินการ 1271 01:00:38,590 --> 01:00:39,390 เพื่อที่ - 1272 01:00:39,390 --> 01:00:39,640 ใช่ 1273 01:00:39,640 --> 01:00:40,440 ความคิดใด? 1274 01:00:40,440 --> 01:00:43,615 >> นักเรียน 60: เพียงแค่ตั้งค่าเป็น ตัวอักษรแบบสุ่มใด ๆ 1275 01:00:43,615 --> 01:00:49,150 1276 01:00:49,150 --> 01:00:51,640 เพียงแค่ทำเท่ากับบัฟเฟอร์ถ่าน ตัวละคร 1277 01:00:51,640 --> 01:00:53,795 และจากนั้นเมื่อคุณได้ buffer มี - 1278 01:00:53,795 --> 01:00:54,110 >> เจสัน Hirschhorn: รอ 1279 01:00:54,110 --> 01:00:55,110 ถ่าน buffer? 1280 01:00:55,110 --> 01:00:55,880 จึงไม่มีดาว? 1281 01:00:55,880 --> 01:00:56,390 >> นักเรียน 60: ใช่ 1282 01:00:56,390 --> 01:00:58,560 จะออกจากดาว 1283 01:00:58,560 --> 01:01:00,690 เท่ากับเป็นตัวละครที่สุ่ม 1284 01:01:00,690 --> 01:01:01,460 >> เจสัน Hirschhorn: OK 1285 01:01:01,460 --> 01:01:02,420 เพื่อให้ฉันหนึ่ง 1286 01:01:02,420 --> 01:01:03,170 >> นักเรียน 60: เหมือนหรือสิ่งที่ 1287 01:01:03,170 --> 01:01:06,160 และจากนั้นเมื่อคุณมีบัฟเฟอร์ มีคุณใช้ - 1288 01:01:06,160 --> 01:01:06,420 >> นักเรียน 61: สตาร์? 1289 01:01:06,420 --> 01:01:07,650 โอ้ไม่เครื่องหมาย 1290 01:01:07,650 --> 01:01:09,000 >> นักเรียน 60: ใช้เครื่องหมาย 1291 01:01:09,000 --> 01:01:09,470 >> เจสัน Hirschhorn: OK 1292 01:01:09,470 --> 01:01:11,320 และสิ่งที่เกี่ยวกับใน fwrite? 1293 01:01:11,320 --> 01:01:14,150 >> นักเรียน 60: ใช้เครื่องหมายอีกครั้ง 1294 01:01:14,150 --> 01:01:14,320 >> เจสัน Hirschhorn: ทั้งหมดขวา 1295 01:01:14,320 --> 01:01:20,970 ดังนั้นความคิดของคุณก็คือเราสร้างถ่านและ นำสิ่งที่อยู่ในนั้นแล้ว 1296 01:01:20,970 --> 01:01:22,612 เขียนถึงถ่านที่ 1297 01:01:22,612 --> 01:01:23,760 >> นักเรียน 60: ใช่ 1298 01:01:23,760 --> 01:01:25,916 >> เจสัน Hirschhorn: อะไร คนคิดว่า 1299 01:01:25,916 --> 01:01:27,770 >> นักเรียน 62: มันซับซ้อน 1300 01:01:27,770 --> 01:01:28,460 >> เจสัน Hirschhorn: OK 1301 01:01:28,460 --> 01:01:29,760 ลองวาดมันออกมา 1302 01:01:29,760 --> 01:01:35,720 ดังนั้นเวลานี้ฉันจะวาดนี้ใน สีแดงบนสแต็คที่นี่แล้วเรา 1303 01:01:35,720 --> 01:01:36,410 จะมี - 1304 01:01:36,410 --> 01:01:36,822 โอ! 1305 01:01:36,822 --> 01:01:38,060 ขอโทษ 1306 01:01:38,060 --> 01:01:45,930 ดังนั้นเวลานี้เรามีสิ่งที่เรียกว่า buffer และก็ในกอง 1307 01:01:45,930 --> 01:01:48,430 ถูกต้องหรือไม่ 1308 01:01:48,430 --> 01:01:51,520 และเรากำลังบันทึกอยู่ในนั้นในตอนแรก 1309 01:01:51,520 --> 01:01:53,830 >> แล้วเรามีการเรียกร้องของเราที่จะ fread 1310 01:01:53,830 --> 01:02:01,300 สิ่งที่ fread ไม่เป็นก็จะใช้เวลาไบต์จาก ไฟล์ของเราและทำให้มันอยู่ที่ไหนสักแห่ง 1311 01:02:01,300 --> 01:02:04,570 มันทำให้มันในสิ่งที่ ชี้สิ่งที่จะ 1312 01:02:04,570 --> 01:02:09,130 ดีก่อนที่เราจะมีที่อยู่นี้ - 1313 01:02:09,130 --> 01:02:10,250 0x0 1314 01:02:10,250 --> 01:02:13,349 ตอนนี้เราทำในสิ่งที่อยู่มี 1315 01:02:13,349 --> 01:02:14,650 >> นักเรียน 63: สิ่งที่ บัฟเฟอร์ที่อยู่เป็น 1316 01:02:14,650 --> 01:02:15,970 >> เจสัน Hirschhorn: สิ่งที่ บัฟเฟอร์ที่อยู่เป็น 1317 01:02:15,970 --> 01:02:22,370 มันอาจเป็นไปได้ สิ่งที่ต้องการที่ 1318 01:02:22,370 --> 01:02:26,950 อาจจะเริ่มต้นด้วย b และ ฉแล้วมีหกอื่น ๆ 1319 01:02:26,950 --> 01:02:27,970 เลขฐานสิบหก 1320 01:02:27,970 --> 01:02:28,480 ไม่สำคัญ 1321 01:02:28,480 --> 01:02:29,470 ที่อยู่บาง 1322 01:02:29,470 --> 01:02:31,410 และเรากำลังผ่านอยู่ที่ค่ะ 1323 01:02:31,410 --> 01:02:34,790 >> และเรากำลังจะใส่หนึ่งของเรา สิ่งไบต์ตามที่อยู่ที่ 1324 01:02:34,790 --> 01:02:38,470 ดังนั้นเราจะใส่หนึ่งของเรา สิ่งไบต์ภายในที่นี่ 1325 01:02:38,470 --> 01:02:40,800 แล้วเรากำลังจะเขียนจาก สิ่งที่เคยอยู่ในที่นี่ 1326 01:02:40,800 --> 01:02:43,425 1327 01:02:43,425 --> 01:02:45,380 ไม่มีใครมีคำถามใด ๆ เกี่ยวกับที่ 1328 01:02:45,380 --> 01:02:50,990 1329 01:02:50,990 --> 01:02:54,690 ที่คิดว่ารหัสนี้จะทำงานอย่างไร 1330 01:02:54,690 --> 01:02:56,020 >> ยกมือของคุณถ้าคุณคิด รหัสนี้จะทำงาน 1331 01:02:56,020 --> 01:02:57,270 คุณต้องใช้ท่าทาง 1332 01:02:57,270 --> 01:03:00,670 1333 01:03:00,670 --> 01:03:02,500 และผู้ที่คิดว่ารหัสนี้จะไม่ทำงาน 1334 01:03:02,500 --> 01:03:04,610 ยกมือของคุณ 1335 01:03:04,610 --> 01:03:06,750 คนอื่น ๆ ที่ควรจะเป็น ยกมือของพวกเขา 1336 01:03:06,750 --> 01:03:07,670 ตกลง 1337 01:03:07,670 --> 01:03:09,390 ไมเคิลที่คุณยืน 1338 01:03:09,390 --> 01:03:10,680 >> ไมเคิล: ผมไม่สามารถตัดสินใจ 1339 01:03:10,680 --> 01:03:12,070 ชนิดของที่อยู่ตรงกลาง 1340 01:03:12,070 --> 01:03:12,736 >> เจสัน Hirschhorn: คุณ อยู่ตรงกลาง 1341 01:03:12,736 --> 01:03:13,092 เลือกหนึ่ง 1342 01:03:13,092 --> 01:03:14,400 >> ไมเคิล: ผมจะมีความเชื่อ และบอกว่ามันจะทำงาน 1343 01:03:14,400 --> 01:03:14,660 >> เจสัน Hirschhorn: OK 1344 01:03:14,660 --> 01:03:16,047 คุณจะมีความเชื่อและบอกว่ามันทำงานอย่างไร 1345 01:03:16,047 --> 01:03:26,490 1346 01:03:26,490 --> 01:03:27,020 สิ่งที่เกิดขึ้น 1347 01:03:27,020 --> 01:03:28,270 >> [VOICES interposing] 1348 01:03:28,270 --> 01:03:35,170 1349 01:03:35,170 --> 01:03:35,950 >> เจสัน Hirschhorn: ไม่มีความผิด seg ของ 1350 01:03:35,950 --> 01:03:40,320 วิธีการที่เราสามารถตรวจสอบเพื่อดูว่า สองสิ่งที่เท่ากัน 1351 01:03:40,320 --> 01:03:42,060 สองไฟล์เท่ากัน 1352 01:03:42,060 --> 01:03:43,300 >> นักเรียน 64: ความแตกต่าง 1353 01:03:43,300 --> 01:03:45,490 >> เจสัน Hirschhorn: Diff 1354 01:03:45,490 --> 01:03:51,630 การตรวจสอบความแตกต่างสำหรับความแตกต่างระหว่าง สองไฟล์และถ้ามันกลับ 1355 01:03:51,630 --> 01:03:52,890 ไม่มีอะไรที่พวกเขากำลังเหมือนกัน 1356 01:03:52,890 --> 01:03:59,030 และถ้าเราเปิดขึ้นเราได้รับไฟล์ของเรา 1357 01:03:59,030 --> 01:04:00,490 เพื่อให้เป็นวิธีที่ถูกต้อง 1358 01:04:00,490 --> 01:04:01,780 ลองมองย้อนกลับไปที่มันอีกครั้งหนึ่ง 1359 01:04:01,780 --> 01:04:04,080 เราไม่จริงไม่ได้ จำเป็นที่จะต้องเริ่มต้นมัน 1360 01:04:04,080 --> 01:04:05,520 >> มันอาจจะดูเล็กน้อย ทำความสะอาดถ้าคุณไม่ได้ใส่ 1361 01:04:05,520 --> 01:04:07,680 สิ่งที่สุ่มอยู่ในที่นั่น 1362 01:04:07,680 --> 01:04:13,070 ชี้ถูกคุณจำเป็นในการสร้าง พื้นที่ในการจัดเก็บบางสิ่งบางอย่างจากบางส่วน 1363 01:04:13,070 --> 01:04:15,530 fread และนำสิ่งที่ ออกจาก fwrite 1364 01:04:15,530 --> 01:04:18,400 และสิ่งที่จะต้องมีทั้งในประเทศ ตัวแปรในสแตก - คุณ 1365 01:04:18,400 --> 01:04:19,890 อาจได้ malloc'd พ​​ื้นที่บางส่วน 1366 01:04:19,890 --> 01:04:23,030 >> ดังนั้นเราจริงอาจมี เขียน malloc ที่นี่และ 1367 01:04:23,030 --> 01:04:25,420 ที่จะได้ทำงาน 1368 01:04:25,420 --> 01:04:28,660 แล้วเราจะได้รับการจัดเก็บ สิ่งที่เราอยู่ที่ไหนสักแห่งในกอง 1369 01:04:28,660 --> 01:04:31,940 แต่นี้เป็นจริงอาจจะ ทางออกที่สง่างามมากที่สุด 1370 01:04:31,940 --> 01:04:34,490 เพียงแค่สร้างพื้นที่บนสแต็คบาง เพราะสิ่งเหล่านี้จะไป 1371 01:04:34,490 --> 01:04:37,690 1372 01:04:37,690 --> 01:04:38,990 >> ฉันจะมีสองความคิดเห็นอื่น ๆ 1373 01:04:38,990 --> 01:04:44,650 ถ้าคุณจะเปิดในนี้และ แล้วได้รับคะแนนเกี่ยวกับเรื่องนี้ความคิดเห็นของฉัน 1374 01:04:44,650 --> 01:04:47,400 จะเป็นดังนี้ 1375 01:04:47,400 --> 01:04:54,300 1 เหล่านี้ของที่นี่ให้ฉันดู เช่นหมายเลขมายากล 1376 01:04:54,300 --> 01:04:56,860 1 ในแง่ของ fread, ทำให้รู้สึก 1377 01:04:56,860 --> 01:04:59,580 นั่นคือจำนวนของสิ่ง จะอ่านหรือเขียน 1378 01:04:59,580 --> 01:05:03,740 >> แต่หนึ่งในที่นี่นี้ควร อาจจะเป็นอย่างอื่น 1379 01:05:03,740 --> 01:05:05,180 ดังนั้นสิ่งที่เป็นวิธีการแก้ปัญหาอย่างใดอย่างหนึ่ง 1380 01:05:05,180 --> 01:05:06,545 >> นักเรียน 65: ขนาดของไบต์ 1381 01:05:06,545 --> 01:05:10,100 1382 01:05:10,100 --> 01:05:11,080 >> เจสัน Hirschhorn: เช่นเดียวกับที่ 1383 01:05:11,080 --> 01:05:13,130 >> นักเรียน 65: ขนาดของถ่าน 1384 01:05:13,130 --> 01:05:13,820 >> เจสัน Hirschhorn: ขนาดของถ่าน 1385 01:05:13,820 --> 01:05:15,290 ใช่ไบต์ไม่ได้เป็นประเภท 1386 01:05:15,290 --> 01:05:16,320 ดังนั้นขนาดของผลงานถ่าน 1387 01:05:16,320 --> 01:05:30,270 เราจะได้มีที่ด้านบนของ รหัสของเรา, # กำหนดว่า 1388 01:05:30,270 --> 01:05:33,410 สิ่งที่เรียกว่าไบต์และ ก็จริงๆถ่าน 1389 01:05:33,410 --> 01:05:37,675 ที่จริงแล้ววิธีการที่ดียิ่งขึ้น อาจจะได้รับนี้ - 1390 01:05:37,675 --> 01:05:39,391 uint 1391 01:05:39,391 --> 01:05:40,780 ใครรู้ว่าสิ่งที่เป็น? 1392 01:05:40,780 --> 01:05:44,388 1393 01:05:44,388 --> 01:05:44,840 >> ขอโทษ 1394 01:05:44,840 --> 01:05:46,090 ฉันมีมันไปข้างหลัง 1395 01:05:46,090 --> 01:05:51,620 1396 01:05:51,620 --> 01:05:52,200 รอไม่ 1397 01:05:52,200 --> 01:05:53,450 ก็ไม่ทางไหนที่ไป? 1398 01:05:53,450 --> 01:05:58,071 1399 01:05:58,071 --> 01:05:59,660 ใครรู้ว่าสิ่งที่เป็น? 1400 01:05:59,660 --> 01:06:00,950 ใช่ 1401 01:06:00,950 --> 01:06:05,650 >> นักเรียน 67: ควรที่จะช่วยสร้างมาตรฐาน เจอสิ่งที่ระบบ 1402 01:06:05,650 --> 01:06:08,760 มี - เช่นจำนวนเต็มไม่ได้ลงนาม ที่มี 8 ไบต​​์? 1403 01:06:08,760 --> 01:06:11,785 >> เจสัน Hirschhorn: นั่น ตรงขวา 1404 01:06:11,785 --> 01:06:14,310 บนเครื่องที่แตกต่างกัน ขนาดของถ่าน - 1405 01:06:14,310 --> 01:06:15,180 มักจะไม่ได้ถ่าน 1406 01:06:15,180 --> 01:06:16,100 ตัวอักษรที่มักจะมีหนึ่งไบต์ 1407 01:06:16,100 --> 01:06:19,590 แต่ขนาดของชนิดข้อมูลอื่น ๆ ที่มี ขนาดแตกต่างกันบนเครื่อง 32 บิต 1408 01:06:19,590 --> 01:06:21,370 เมื่อเทียบกับเครื่อง 64 บิต 1409 01:06:21,370 --> 01:06:25,180 uint8_t เสมอ 8 บิต - 1410 01:06:25,180 --> 01:06:27,210 เสมอหนึ่งไบต์ 1411 01:06:27,210 --> 01:06:29,580 >> และฉันต้องการที่จะรวมถึงที่ ไฟล์ส่วนหัว int มาตรฐาน 1412 01:06:29,580 --> 01:06:35,040 ดังนั้นตอนนี้จะได้รับน่าจะเป็น วิธีที่ดีที่สุดที่จะเขียนรหัสนี้ 1413 01:06:35,040 --> 01:06:40,160 1414 01:06:40,160 --> 01:06:41,450 ดังนั้นฉันจะกำจัดของตัวเลขมหัศจรรย์ 1415 01:06:41,450 --> 01:06:44,690 และฉันยังมีตรรกะมากขึ้น ประเภทการบัฟเฟอร์ 1416 01:06:44,690 --> 01:06:49,450 มันไม่ได้เป็นเพียงถ่านเป็นไบต์ ซึ่งเป็นสิ่งที่เราคาดหวังให้เป็น 1417 01:06:49,450 --> 01:06:53,400 >> และที่นี่เราได้จริง รับบิตที่แข็งแกร่งมากขึ้น 1418 01:06:53,400 --> 01:06:55,190 เราไม่ได้เรียกมันว่าถ่านซึ่ง - 1419 01:06:55,190 --> 01:06:58,630 บางทีใครจะรู้ - ที่อาจจะแตกต่างกัน ขนาดในเครื่องที่แตกต่างกัน 1420 01:06:58,630 --> 01:07:02,025 เรากำลังจริงว่าตรงนี้เป็น หนึ่งไบต์เสมอไม่ว่าสิ่งที่ 1421 01:07:02,025 --> 01:07:05,810 และถ้าเราดูที่นี่เราทำ cp 1422 01:07:05,810 --> 01:07:08,340 เอ่อโอ้ 1423 01:07:08,340 --> 01:07:09,590 สิ่งที่เกิดขึ้น 1424 01:07:09,590 --> 01:07:14,470 1425 01:07:14,470 --> 01:07:16,170 >> นักเรียน 68: มันอาจจะเปลี่ยน 1426 01:07:16,170 --> 01:07:17,880 >> เจสัน Hirschhorn: อะไรนะ? 1427 01:07:17,880 --> 01:07:19,130 >> นักเรียน 69: มันคืออะไร 1428 01:07:19,130 --> 01:07:21,940 1429 01:07:21,940 --> 01:07:25,080 >> นักเรียน 70: คุณไม่ได้ กำหนดเป็นประเภท 1430 01:07:25,080 --> 01:07:28,684 >> นักเรียน 71: แต่มันควรจะเป็น ได้รับการกำหนดไว้ในมาตรฐาน 1431 01:07:28,684 --> 01:07:29,934 >> นักเรียน 72: สิ่งที่เกิดขึ้น? 1432 01:07:29,934 --> 01:07:37,660 1433 01:07:37,660 --> 01:07:40,210 >> นักเรียน 73: ควรจะกำหนดเป็นตัวพิมพ์ใหญ่ทั้งหมดหรือไม่ 1434 01:07:40,210 --> 01:07:41,370 >> เจสัน Hirschhorn: ดังนั้นจึงไม่ # define 1435 01:07:41,370 --> 01:07:45,490 ที่จริงในกรณีนี้ผม จะใช้ typedef 1436 01:07:45,490 --> 01:07:48,590 เพราะเรากำลังจะใช้มันเป็น ประเภทในสถานที่หนึ่ง 1437 01:07:48,590 --> 01:07:51,990 ดังนั้นในกรณีนี้เราต้องการจริง typedef เหมือนเรากำลังพิมพ์รูปแบบใหม่ 1438 01:07:51,990 --> 01:07:54,490 ไบต์และมันก็เป็นหลักนี้ 1439 01:07:54,490 --> 01:07:56,590 เป็นบิตที่แตกต่างจาก # กำหนด 1440 01:07:56,590 --> 01:08:02,740 >> และตอนนี้รหัสของเราทำงานอย่างสมบูรณ์แบบ 1441 01:08:02,740 --> 01:08:05,230 ดังนั้นอีกครั้ง # กำหนดจะใช้เวลาบางสิ่งบางอย่าง แทนที่มันทุก 1442 01:08:05,230 --> 01:08:06,780 กับสิ่งอื่น ๆ 1443 01:08:06,780 --> 01:08:07,920 มันเป็นเพียงแมโคร - 1444 01:08:07,920 --> 01:08:09,420 ชวเลขในการกำจัดของตัวเลขมหัศจรรย์ 1445 01:08:09,420 --> 01:08:11,360 แต่ในกรณีนี้เพราะเรา ใช้มันเป็นชนิด - 1446 01:08:11,360 --> 01:08:12,180 ที่นี่ - 1447 01:08:12,180 --> 01:08:19,880 เพื่อให้การทำงานที่เราต้องการ การ typedef สิ่งที่เป็นไบต์ 1448 01:08:19,880 --> 01:08:21,840 >> และเรากำลังกำหนดมันที่นี่ 1449 01:08:21,840 --> 01:08:24,750 มันไม่ struct ก็จริง เพียงจำนวนเต็ม 1450 01:08:24,750 --> 01:08:27,680 มันเป็นหนึ่งในไบต์ยาว 1451 01:08:27,680 --> 01:08:31,910 รหัสนี้จะมีออนไลน์และ ทุกท่านควรจะมีได้ในขณะนี้ 1452 01:08:31,910 --> 01:08:33,830 >> ดังนั้นเราจึงมี - 1453 01:08:33,830 --> 01:08:34,250 ที่สมบูรณ์แบบ - 1454 01:08:34,250 --> 01:08:41,359 13 นาทีที่เหลือที่จะไป กว่าปัญหาตั้ง 5 1455 01:08:41,359 --> 01:08:44,270 ผมต้องการที่จะเดินผ่าน copy.c กัน และจากนั้นเราจะพูดสั้น ๆ 1456 01:08:44,270 --> 01:08:47,120 เกี่ยวกับส่วนอื่น ๆ ของปัญหาที่กำหนด 1457 01:08:47,120 --> 01:08:48,899 เพื่อให้ฉันดึงขึ้น copy.c. 1458 01:08:48,899 --> 01:09:03,930 1459 01:09:03,930 --> 01:09:08,810 และสิ่งที่น่าสนใจคือเราได้จริง เขียนแล้วจำนวนมากของรหัสนี้ 1460 01:09:08,810 --> 01:09:11,180 >> รหัสที่เราเขียนอย่างแท้จริงเพียง ออกจากที่นี่มาเมื่อฉันถูก 1461 01:09:11,180 --> 01:09:13,120 เขียนนี้ของฉันเอง 1462 01:09:13,120 --> 01:09:16,990 แต่นี้เป็น copy.c, รูปแบบพื้นฐาน สำหรับสองส่วนแรกของ 1463 01:09:16,990 --> 01:09:22,340 ปัญหาที่กำหนดไว้สำหรับ whodunit.c ซึ่ง คุณจะต้องเขียนและ resize.c 1464 01:09:22,340 --> 01:09:27,050 Recover.c ซึ่งเป็นสามและครั้งสุดท้าย ส่วนหนึ่งของชุดปัญหาไม่ได้ 1465 01:09:27,050 --> 01:09:29,529 ตามออกของไฟล์นี้ 1466 01:09:29,529 --> 01:09:32,200 >> คุณจะต้องเขียนไฟล์ที่ เราจะให้คุณแม่แบบสำหรับการที่ 1467 01:09:32,200 --> 01:09:34,620 ยื่น แต่มันมีอะไร จะทำอย่างไรกับ copy.c. 1468 01:09:34,620 --> 01:09:38,675 แต่เนื่องจาก copy.c เป็นพื้นฐานสำหรับ สองส่วนแรกที่เรากำลังจะ 1469 01:09:38,675 --> 01:09:42,000 จะเดินผ่านได้ในขณะนี้เพื่อให้คุณมี ความรู้สึกที่ดีของสิ่งที่มันไม่ 1470 01:09:42,000 --> 01:09:43,640 >> และแสดงความคิดเห็นให้บางส่วนของมันออกไป 1471 01:09:43,640 --> 01:09:45,120 เราได้เขียนแล้วบางส่วนของนี้ 1472 01:09:45,120 --> 01:09:49,220 ครั้งแรกที่เราทำให้แน่ใจว่า เราได้รับข้อโต้แย้งที่สาม 1473 01:09:49,220 --> 01:09:50,560 ต่อไปเราจะจดจำชื่อไฟล์ 1474 01:09:50,560 --> 01:09:52,960 ดังนั้นเราจึงข้ามขั้นตอนนี้เมื่อ เราเขียนสิ่งที่เรา - 1475 01:09:52,960 --> 01:09:54,700 เมื่อ cp ของเรา 1476 01:09:54,700 --> 01:09:56,750 แต่ที่นี่พวกเขากำลังทำ มันทำความสะอาดบิต 1477 01:09:56,750 --> 01:09:59,350 >> พวกเขากำลังตรวจสอบเพื่อให้แน่ใจว่า ไฟล์ทั้งสองดีใน 1478 01:09:59,350 --> 01:10:00,450 นอกเหนือไปจากการเปิดให้ 1479 01:10:00,450 --> 01:10:04,760 เราเขียนรหัสทั้งหมดนี้เพียงแค่ตอนนี้ดังนั้นฉัน ไม่ได้ไปอาศัยอยู่ในรหัสนี้ 1480 01:10:04,760 --> 01:10:09,670 ต่อไปคือสิ่งที่เฉพาะบางอย่าง ประเภทของไฟล์ที่เรากำลังใช้ซึ่ง 1481 01:10:09,670 --> 01:10:12,240 เป็นไฟล์บิตแมป 1482 01:10:12,240 --> 01:10:15,660 แฟ้มบิตแมปมีข้อมูลบางส่วน เกี่ยวข้องกับพวกเขา 1483 01:10:15,660 --> 01:10:20,190 >> ดังนั้นคู่แรกของไบต์ บอกคุณเกี่ยวกับไฟล์ 1484 01:10:20,190 --> 01:10:23,460 พวกเขาจะไม่สีของ พิกเซลในภาพที่ 1485 01:10:23,460 --> 01:10:25,120 พวกเขาบอกคุณเกี่ยวกับไฟล์ 1486 01:10:25,120 --> 01:10:28,220 และถ้าคุณอ่านผ่านชุดปัญหา คุณจะมีข้อมูลมากขึ้น 1487 01:10:28,220 --> 01:10:33,100 เกี่ยวกับประเภทของโครงสร้างข้อมูล จะมาพร้อมกับบิตแมป 1488 01:10:33,100 --> 01:10:39,350 >> แต่นั่นเป็นเหตุผลที่เรามีเป็นครั้งแรกนี้ ชุดของ - รหัสนี้ที่นี่ 1489 01:10:39,350 --> 01:10:42,490 เรากำลังอ่านเมตาดาต้า - 1490 01:10:42,490 --> 01:10:45,800 สองชิ้นของเมตาดาต้า - ไฟล์ ส่วนหัวและส่วนหัวของข้อมูล 1491 01:10:45,800 --> 01:10:51,030 และเราจะตรวจสอบบางส่วนของมันที่จะ ให้แน่ใจว่ามันเป็นไฟล์บิตแมปที่แท้จริง 1492 01:10:51,030 --> 01:10:52,420 ก่อนดำเนินการต่อ 1493 01:10:52,420 --> 01:10:55,470 >> และอีกครั้งเหล่านี้เป็นรายละเอียดที่เรา ไม่จำเป็นต้องไปลงในขณะนี้ 1494 01:10:55,470 --> 01:10:57,720 ถ้าคุณอ่านผ่านชุดปัญหา คุณจะเข้าใจเหล่านี้ 1495 01:10:57,720 --> 01:11:01,370 เรื่องยาวสั้นเหล่านี้เป็นเพียงการพูดว่า นี้เป็นไฟล์บิตแมปและ 1496 01:11:01,370 --> 01:11:02,810 ยืนยันว่า 1497 01:11:02,810 --> 01:11:05,180 >> ต่อไปเรากำลังเขียนเหล่านั้น ไฟล์ออก 1498 01:11:05,180 --> 01:11:05,660 เราจะเห็นว่าที่นี่ 1499 01:11:05,660 --> 01:11:06,910 เรากำลังเขียนถึงตัวชี้ออก 1500 01:11:06,910 --> 01:11:09,260 1501 01:11:09,260 --> 01:11:11,320 ต่อไปเราจะกำหนดช่องว่างภายใน 1502 01:11:11,320 --> 01:11:15,240 ดังนั้นอีกครั้งเป็นพิเศษด้วย ไฟล์บิตแมปเส้นบางรวมถึง 1503 01:11:15,240 --> 01:11:16,840 padding ที่สิ้นสุด 1504 01:11:16,840 --> 01:11:19,000 และถ้าคุณอ่านผ่านชุดปัญหา คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับช่องว่างภายใน 1505 01:11:19,000 --> 01:11:22,330 นี้คือสูตรที่จะหาช่องว่างภายใน 1506 01:11:22,330 --> 01:11:23,610 >> สำคัญที่ต้องจำ - 1507 01:11:23,610 --> 01:11:29,720 เมื่อคุณเปลี่ยนขนาดของบิตแมป ไฟล์ที่มีการเปลี่ยนแปลงช่องว่างภายใน 1508 01:11:29,720 --> 01:11:31,970 เมื่อคุณเปลี่ยนขนาดของ ไฟล์ที่มีการเปลี่ยนแปลงช่องว่างภายใน 1509 01:11:31,970 --> 01:11:34,310 มันไม่เคยไปได้ สูงกว่า 3 - 1510 01:11:34,310 --> 01:11:36,510 มันจะเป็น 0 ถึง 3 รวม 1511 01:11:36,510 --> 01:11:38,930 แต่เมื่อคุณเปลี่ยนขนาดของ บางสิ่งบางอย่างที่มีการเปลี่ยนแปลงช่องว่างภายใน 1512 01:11:38,930 --> 01:11:47,100 >> ถ้าฉันมีเพียงหนึ่งพิกเซลในแถวที่ผม ต้องสามไบต์ของ padding เพราะ 1513 01:11:47,100 --> 01:11:51,190 แต่ละแถวจะต้องมีคูณสี่ ไบต์ยาวในไฟล์บิตแมป 1514 01:11:51,190 --> 01:11:56,120 แต่ถ้าฉันเป็นสองเท่ามันจะไปจากที่หนึ่งพิกเซล สองพิกเซลซึ่งแต่ละ, 1515 01:11:56,120 --> 01:11:59,510 สมมติว่าเป็นไบต์แล้วฉันต้องการ สองไบต์ของการขยายที่จะทำให้ 1516 01:11:59,510 --> 01:12:00,970 ที่เท่ากับสี่ 1517 01:12:00,970 --> 01:12:04,200 >> ดังนั้นเมื่อผมเปลี่ยนขนาดของบางสิ่งบางอย่าง ฉันต้องการที่จะเปลี่ยนจำนวนเงิน 1518 01:12:04,200 --> 01:12:06,551 ของการขยายฉันมี 1519 01:12:06,551 --> 01:12:08,100 ไม่ว่าทำให้ความรู้สึกที่ทุกคนหรือไม่ 1520 01:12:08,100 --> 01:12:12,020 1521 01:12:12,020 --> 01:12:18,720 ต่อไปเราจะย้ำกว่าแต่ละแถว หรือผ่านแถวทั้งหมด 1522 01:12:18,720 --> 01:12:21,400 แล้วเราย้ำผ่าน แต่ละคอลัมน์ในแต่ละแถว 1523 01:12:21,400 --> 01:12:25,330 เรากำลังรักษาบิตแมปนี้เช่น ตารางเช่นเดียวกับที่เราเคยได้รับการรักษา 1524 01:12:25,330 --> 01:12:26,490 คณะกรรมการใน 15 1525 01:12:26,490 --> 01:12:29,200 >> เหมือนอย่างที่เราได้รับการรักษาอิฐเมื่อ เราพิมพ์พวกเขาบนหน้าจอ 1526 01:12:29,200 --> 01:12:31,350 ตารางของแถวและคอลัมน์ 1527 01:12:31,350 --> 01:12:32,350 - แล้วที่เราเห็นนี้ 1528 01:12:32,350 --> 01:12:33,840 เราจริงเพียงแค่เขียนนี้ 1529 01:12:33,840 --> 01:12:35,780 เราได้สร้างที่เก็บชั่วคราวบางส่วน 1530 01:12:35,780 --> 01:12:38,710 เราอ่านในนั้นแล้ว เราเขียนมันออกมา 1531 01:12:38,710 --> 01:12:42,680 ตรงนี้เป็นสิ่งที่เราเพิ่งได้ 1532 01:12:42,680 --> 01:12:46,760 >> ต่อไปเพราะผมบอกว่าแต่ละบรรทัด จะสิ้นสุดลงในช่องว่างบางอย่างเรา 1533 01:12:46,760 --> 01:12:48,260 ข้ามช่องว่างภายในที่ - 1534 01:12:48,260 --> 01:12:51,000 padding เก่า 1535 01:12:51,000 --> 01:12:52,630 แล้วเราเพิ่มกลับ 1536 01:12:52,630 --> 01:12:55,140 ในกรณีนี้เรากำลังสร้าง ไฟล์ที่แน่นอนเดียวกัน 1537 01:12:55,140 --> 01:12:56,180 เราเพียงแค่การคัดลอก 1538 01:12:56,180 --> 01:12:57,700 ดังนั้นสายนี้เป็นชนิดของโง่ 1539 01:12:57,700 --> 01:12:59,660 เราสามารถแท้จริงเพียง ใส่ช่องว่างค่ะ 1540 01:12:59,660 --> 01:13:04,290 >> แต่ถ้าคุณเปลี่ยนขนาดของไฟล์ คุณยังคงต้องการให้บรรทัดนี้ 1541 01:13:04,290 --> 01:13:08,510 1542 01:13:08,510 --> 01:13:11,560 ดังนั้นหากเราเปลี่ยนขนาดของไฟล์ที่ เราจะยังคงต้องการที่จะข้าม 1543 01:13:11,560 --> 01:13:12,810 กว่า padding เก่าหรือไม่ 1544 01:13:12,810 --> 01:13:15,170 1545 01:13:15,170 --> 01:13:15,970 >> นักเรียน 74: ใช่ 1546 01:13:15,970 --> 01:13:17,090 >> เจสัน Hirschhorn: ดังนั้นที่เราทำ 1547 01:13:17,090 --> 01:13:19,290 เพราะสิ่งนี้อีกครั้งข้อเสนอ ด้วยแฟ้มแหล่งที่มา 1548 01:13:19,290 --> 01:13:21,570 เราไม่ได้ดูแลเกี่ยวกับช่องว่างภายใน จากแฟ้มแหล่งที่มา 1549 01:13:21,570 --> 01:13:23,410 เราต้องการที่จะไปที่บรรทัดถัดไป 1550 01:13:23,410 --> 01:13:28,850 แต่เราไม่ได้ใส่เพียงกลับ จำนวนเงินเดิมของการขยาย 1551 01:13:28,850 --> 01:13:31,540 เราต้องการที่จะนำกลับ จำนวนใหม่ของการขยาย 1552 01:13:31,540 --> 01:13:35,810 >> ดังนั้นเมื่อเรากำลังจะเปลี่ยนขนาดของ ไฟล์เรายังคงต้องการที่จะข้าม 1553 01:13:35,810 --> 01:13:38,270 padding ในแฟ้มเก่า - สิ่งที่ เรากำลังอ่านจาก 1554 01:13:38,270 --> 01:13:40,370 แต่สิ่งที่เรากำลังเขียนถึงเราจะ ที่จะต้องนำกลับมาบางส่วนที่แตกต่างกัน 1555 01:13:40,370 --> 01:13:41,890 จำนวนของการขยายที่ เราได้กำหนด 1556 01:13:41,890 --> 01:13:42,780 ใช่ 1557 01:13:42,780 --> 01:13:44,550 >> นักเรียน 75: คำสั่งของทั้งสอง สายไม่เป็นไรใช่มั้ย 1558 01:13:44,550 --> 01:13:46,160 เพราะคุณกำลังจัดการ ไฟล์ที่แตกต่างกัน 1559 01:13:46,160 --> 01:13:46,620 >> เจสัน Hirschhorn: แน่นอน 1560 01:13:46,620 --> 01:13:48,220 คำสั่งของทั้งสองสาย ไม่สำคัญ 1561 01:13:48,220 --> 01:13:49,790 เราเขียนบรรทัดนี้ 1562 01:13:49,790 --> 01:13:51,430 นี้เป็นที่นี่เพื่อดูไฟล์ เรากำลังเขียนถึง 1563 01:13:51,430 --> 01:13:54,370 นั่นเป็นสิ่งสำคัญเพื่อที่เราได้รับ ในปริมาณที่เหมาะสมของการขยาย 1564 01:13:54,370 --> 01:13:57,560 นี้มีการจัดการกับไฟล์ใน 1565 01:13:57,560 --> 01:13:58,560 เราต้องการที่จะข้ามไปทางด้านขวา ผ่านช่องว่างภายใน 1566 01:13:58,560 --> 01:13:59,470 >> เราไม่ต้องการที่จะอ่าน - 1567 01:13:59,470 --> 01:14:01,500 ถ้าเรากำลังอ่านไบต์ในเวลาที่เรา ไม่สนใจเกี่ยวกับผู้ไบต์ padding 1568 01:14:01,500 --> 01:14:04,070 เราต้องการที่จะย้ายไปยังบรรทัดถัดไป 1569 01:14:04,070 --> 01:14:11,800 ในที่สุดเช่นเดียวกับลูซี่ให้สำหรับเรา เราปิดไฟล์และ return 0 1570 01:14:11,800 --> 01:14:13,890 ดังนั้นนี่คือ copy.c. 1571 01:14:13,890 --> 01:14:17,850 และเราจริงเขียน - เราใช้เวลาส่วนใหญ่ของ เขียนนี้เป็นหลักส่วน 1572 01:14:17,850 --> 01:14:18,740 >> คุณทำนี้ 1573 01:14:18,740 --> 01:14:22,440 เพื่อหวังว่าคุณจะมีความรู้สึกที่ดี ของสิ่งที่เกิดขึ้นที่นี่ 1574 01:14:22,440 --> 01:14:25,890 ความแตกต่างใหญ่ตรงไปตรงมาเป็นเพียง ส่วนแรกนี้ที่เกี่ยวข้องกับ 1575 01:14:25,890 --> 01:14:29,970 ลักษณะของแฟ้มบิตแมป 1576 01:14:29,970 --> 01:14:33,570 ดังนั้นผมจึงมีเป็นสไลด์ต่อไปของฉัน สิ่งที่เราจะต้องทำอย่างไร 1577 01:14:33,570 --> 01:14:35,510 ดีขอคิดเกี่ยวกับการสืบสวนสอบสวน 1578 01:14:35,510 --> 01:14:38,080 >> และสำหรับคนที่อ่านผ่าน ปัญหาที่กำหนดสิ่งที่เราทำ 1579 01:14:38,080 --> 01:14:41,410 ต้องทำสืบสวนสอบสวน? 1580 01:14:41,410 --> 01:14:42,080 เพียงแค่ 1581 01:14:42,080 --> 01:14:42,460 aleja 1582 01:14:42,460 --> 01:14:48,570 >> aleja: คุณสามารถนำออกไปส่วนหนึ่ง ของพิกเซลที่หมายถึงสีแดงแต่ละ 1583 01:14:48,570 --> 01:14:49,730 แล้ว - 1584 01:14:49,730 --> 01:14:50,730 ชนิดของ? 1585 01:14:50,730 --> 01:14:51,860 >> เจสัน Hirschhorn: OK 1586 01:14:51,860 --> 01:14:54,460 ดังนั้นจะออกเป็นส่วนหนึ่งของแต่ละ พิกเซลที่หมายถึงสีแดง 1587 01:14:54,460 --> 01:14:57,234 ที่ใกล้ชิด แต่ไม่ทั้งหมดของมัน 1588 01:14:57,234 --> 01:14:59,780 >> นักเรียน 76: ดีมี วิธีการที่แตกต่างกันที่จะทำมัน 1589 01:14:59,780 --> 01:14:59,870 >> เจสัน Hirschhorn: OK 1590 01:14:59,870 --> 01:15:03,070 ให้ฉันวิธีหนึ่ง 1591 01:15:03,070 --> 01:15:08,240 >> นักเรียน 76: จะออกทั้งหมดสีแดงและ แล้วเน้นสีฟ้าและสีเขียว 1592 01:15:08,240 --> 01:15:10,010 >> เจสัน Hirschhorn: OK 1593 01:15:10,010 --> 01:15:11,830 ให้ดังนั้นทั้งสองวิธีการเหล่านี้ - 1594 01:15:11,830 --> 01:15:15,210 ดูเหมือนเราจะให้มันพิกเซลมัน มีระดับสีแดง, สีฟ้า, สีเขียวและ 1595 01:15:15,210 --> 01:15:19,350 เราต้องการที่จะเปลี่ยนระดับความสัมพันธ์ของ สีแดง, สีฟ้า, สีเขียวและขึ้นอยู่ 1596 01:15:19,350 --> 01:15:20,740 บนพิกเซลที่ 1597 01:15:20,740 --> 01:15:28,380 ที่ไหนในรหัสนี้เราควรจะเปลี่ยน ญาติสีแดง, สีฟ้า, สีเขียวและ 1598 01:15:28,380 --> 01:15:29,720 ระดับของพิกเซลที่กำหนด 1599 01:15:29,720 --> 01:15:30,600 หลังจากที่เราได้อ่านมัน - 1600 01:15:30,600 --> 01:15:32,520 ก่อนที่เราจะเขียนมันได้หรือไม่ 1601 01:15:32,520 --> 01:15:34,564 ให้ฉันหมายเลขบรรทัด 1602 01:15:34,564 --> 01:15:35,950 >> นักเรียนหลาย: 83 1603 01:15:35,950 --> 01:15:37,320 >> เจสัน Hirschhorn: 83 1604 01:15:37,320 --> 01:15:38,570 ดังนั้นที่นี่ 1605 01:15:38,570 --> 01:15:40,830 1606 01:15:40,830 --> 01:15:45,710 สำหรับสืบสวนสอบสวนรหัสที่คุณจำเป็นต้อง เขียนทุกคนควรจะไปที่นั่น 1607 01:15:45,710 --> 01:15:47,640 และที่เป็นเพียงรหัส คุณจะต้องเขียน 1608 01:15:47,640 --> 01:15:51,520 เพราะเหมือนอย่างที่เราได้ยินสิ่งที่คุณต้อง ทำคือการเปลี่ยนเหล่านี้สีฟ้าญาติ 1609 01:15:51,520 --> 01:15:54,420 ระดับสีแดงและสีเขียวจากแต่ละพิกเซล 1610 01:15:54,420 --> 01:15:58,250 >> ที่คุณได้อ่านในและตอนนี้คุณ จะเขียนมันออกมา 1611 01:15:58,250 --> 01:16:03,100 ฉันจะได้รับ - ถ้าฉันมีสิ่งนี้ ที่เรียกว่าสามขวาที่นี่และมันเป็นของ 1612 01:16:03,100 --> 01:16:04,570 ประเภท RGBTRIPLE - 1613 01:16:04,570 --> 01:16:08,650 ดีถ้าเรามองใน bmp.h, สิ่งที่เป็น RGBTRIPLE? 1614 01:16:08,650 --> 01:16:11,450 1615 01:16:11,450 --> 01:16:12,700 >> นักเรียน 77: มันเป็นโครงสร้าง 1616 01:16:12,700 --> 01:16:17,440 1617 01:16:17,440 --> 01:16:18,900 >> เจสัน Hirschhorn: RGBTRIPLE เป็น struct 1618 01:16:18,900 --> 01:16:22,330 เราจะเห็นว่าทางด้านขวาลงที่นี่ 1619 01:16:22,330 --> 01:16:26,600 และอื่น ๆ ถ้าผมต้องการที่จะเข้าถึงพูด ระดับสีแดงของ struct ฉันจะ 1620 01:16:26,600 --> 01:16:30,005 เข้าถึงระดับสีแดงของ struct นี้ 1621 01:16:30,005 --> 01:16:37,280 >> [CLASS พึมพำ] 1622 01:16:37,280 --> 01:16:38,530 >> นักเรียน 78: RGBTRIPLE.rgbtred? 1623 01:16:38,530 --> 01:16:47,250 1624 01:16:47,250 --> 01:16:48,856 >> เจสัน Hirschhorn: เป็นความถูกต้องหรือไม่ 1625 01:16:48,856 --> 01:16:53,040 >> นักเรียน 79: มันควรจะเป็นสาม จุดแทน RG​​BTRIPLE จุด? 1626 01:16:53,040 --> 01:16:54,120 >> เจสัน Hirschhorn: ทริปเปิ 1627 01:16:54,120 --> 01:16:56,700 ทริปเปิเป็นตัวแปรท้องถิ่นเพื่อ ที่นี่มีคำแนะนำที่นี่ 1628 01:16:56,700 --> 01:16:58,400 ดังนั้นเราก็ใช้เครื่องหมายจุด 1629 01:16:58,400 --> 01:17:00,480 นี้จะให้ฉันระดับของสีแดง 1630 01:17:00,480 --> 01:17:06,180 ถ้าผมต้องการที่จะเปลี่ยนมันฉันเพิ่งตั้ง มันเท่ากับสิ่งที่แตกต่าง 1631 01:17:06,180 --> 01:17:13,190 ดังนั้นอีกครั้งบรรทัดของรหัสนี้เข้าถึง ตัวแปรนี้อยู่ภายในนี้และ 1632 01:17:13,190 --> 01:17:15,070 เราสามารถตั้งค่าให้สิ่งใหม่ ๆ 1633 01:17:15,070 --> 01:17:20,040 >> ดังนั้นสำหรับสืบสวนสอบสวนอีกครั้งนี้ ในสาระสำคัญสิ่งที่เราต้องทำ 1634 01:17:20,040 --> 01:17:21,170 ง่ายมาก 1635 01:17:21,170 --> 01:17:25,020 เพียงแค่เปลี่ยนระดับญาติบางส่วนและ นี่คือที่รหัสที่จะไป 1636 01:17:25,020 --> 01:17:27,720 ปรับขนาดในมืออื่น ๆ , เป็นบิต trickier 1637 01:17:27,720 --> 01:17:30,900 ในความเป็นจริงน่าจะปรับขนาด ส่วนหนึ่งของปัญหาที่ยากชุดนี้ 1638 01:17:30,900 --> 01:17:32,720 เรามีสามนาทีเพื่อไปกว่านั้น 1639 01:17:32,720 --> 01:17:34,910 >> แต่อีกครั้งที่เราได้เขียนแล้ว มากที่สุดของรหัสนี้เพื่อให้เรา 1640 01:17:34,910 --> 01:17:36,500 ควรจะคุ้นเคยสวย 1641 01:17:36,500 --> 01:17:40,750 สิ่งที่มีบางสิ่งบางอย่างที่เราต้องการที่จะทำใน ปรับขนาดถ้าคุณได้อ่านกว่า 1642 01:17:40,750 --> 01:17:43,470 ปัญหาการตั้งค่า? 1643 01:17:43,470 --> 01:17:45,290 ถ้าคุณให้พวกเขาให้ฉันเรา สามารถพูดคุยเกี่ยวกับพวกเขา 1644 01:17:45,290 --> 01:17:47,340 อะไรบางสิ่งบางอย่างที่เราต้องการจะทำคืออะไร 1645 01:17:47,340 --> 01:17:47,970 >> นักเรียน 80: แนวตั้ง - 1646 01:17:47,970 --> 01:17:52,360 เพื่อให้คุณได้ปรับขนาดในแนวนอนนั้น แต่ปรับขนาดในแนวตั้งด้วยหรือไม่ 1647 01:17:52,360 --> 01:17:58,475 >> เจสัน Hirschhorn: ดังนั้นถ้าเราได้รับ พิกเซลและเราต้องการที่จะปรับขนาดได้โดย 1648 01:17:58,475 --> 01:18:03,460 ปัจจัยที่สองได้ในขณะนี้ความต้องการที่จะ ปรับขนาดในแนวนอนและการปรับขนาด 1649 01:18:03,460 --> 01:18:05,220 ดิ่ง 1650 01:18:05,220 --> 01:18:06,640 ไม่ที่ทำให้รู้สึก? 1651 01:18:06,640 --> 01:18:07,060 ใช่ 1652 01:18:07,060 --> 01:18:09,300 เพื่อที่ว่าน่าจะเป็น ความท้าทายที่ยิ่งใหญ่ที่สุด 1653 01:18:09,300 --> 01:18:10,430 และเราจะพูดคุยเกี่ยวกับว่าในวินาที 1654 01:18:10,430 --> 01:18:11,065 ใช่ 1655 01:18:11,065 --> 01:18:15,270 >> นักเรียน 81: วิธีที่ฉันคิดว่ามัน คุณจำเป็นต้องได้รับการพิมพ์ออก - 1656 01:18:15,270 --> 01:18:15,490 >> เจสัน Hirschhorn: รอ 1657 01:18:15,490 --> 01:18:17,580 ไม่ได้บอกเราว่าสิ่งที่คุณทำ 1658 01:18:17,580 --> 01:18:20,620 เรากำลังจะพูดคุยในตรรกะ 1659 01:18:20,620 --> 01:18:21,870 >> นักเรียน 81: ตกลง 1660 01:18:21,870 --> 01:18:25,090 1661 01:18:25,090 --> 01:18:27,410 สิ่งที่เป็นคำถามได้หรือไม่ 1662 01:18:27,410 --> 01:18:28,892 >> เจสัน Hirschhorn: คุณเพียงแค่ ยกมือของคุณ 1663 01:18:28,892 --> 01:18:31,600 มีคำถามไม่ได้ 1664 01:18:31,600 --> 01:18:32,520 ผมขอนำเสนอ 1665 01:18:32,520 --> 01:18:34,560 ให้ฉันเพียงแค่พูดคุยสั้น ๆ นี้ 1666 01:18:34,560 --> 01:18:38,400 ดังนั้นเราจึงได้หนึ่งพิกเซลเราต้องการที่จะ ทำซ้ำได้ทั้งแนวนอนและ 1667 01:18:38,400 --> 01:18:39,360 ดิ่ง 1668 01:18:39,360 --> 01:18:48,920 ดังนั้นความนึกคิดสิ่งที่เราทำที่นี่คือเรา อ่านได้ในพิกเซลของเราเราเขียนมัน 1669 01:18:48,920 --> 01:18:51,690 แต่หลายครั้ง 1670 01:18:51,690 --> 01:18:54,720 >> แต่เราก็มีเคล็ดลับของเราที่นี่เพราะ แล้วเราต้องการที่จะข้ามไป 1671 01:18:54,720 --> 01:18:57,660 บรรทัดถัดไปและเขียนได้ที่ จุดเริ่มต้นของบรรทัดถัดไป 1672 01:18:57,660 --> 01:19:02,960 ดังนั้นหากเราต้องการที่จะทำซ้ำทั้ง แนวนอนและแนวตั้งคืออะไร 1673 01:19:02,960 --> 01:19:05,050 หนึ่งในวิธีที่ดีที่จะทำว่า - 1674 01:19:05,050 --> 01:19:06,780 หนึ่งที่ดี แต่จะทำอย่างไรที่ 1675 01:19:06,780 --> 01:19:11,950 ดังนั้นเราจึงไม่จำเป็นที่จะแสวงหาอย่างต่อเนื่อง รอบไฟล์ของเราที่จะวางสิ่งที่ 1676 01:19:11,950 --> 01:19:14,360 >> คำถามที่อาจไม่ได้ ทำให้ความรู้สึก แต่ฉันคิดว่า 1677 01:19:14,360 --> 01:19:15,800 คำตอบก็จะช่วยให้ 1678 01:19:15,800 --> 01:19:17,210 >> นักเรียน 82: สร้างอาร์เรย์? 1679 01:19:17,210 --> 01:19:20,090 >> เจสัน Hirschhorn: ดังนั้นขอคิด ของแต่ละไฟล์เป็นแถว 1680 01:19:20,090 --> 01:19:22,550 ลองคิดในแง่ของแถว 1681 01:19:22,550 --> 01:19:26,670 ถ้าเรามีแถวแรกของเราจากขนาดเล็ก ภาพเราสามารถทำให้แถวนั้น 1682 01:19:26,670 --> 01:19:30,640 เป็นแถวขนาดใหญ่จากภาพขนาดใหญ่ แล้วทำซ้ำแถวนั้น แต่ 1683 01:19:30,640 --> 01:19:34,250 หลายครั้งจะต้องมีการจำลองแบบ แทนที่จะไปพิกเซลโดยพิกเซล 1684 01:19:34,250 --> 01:19:37,260 ที่ได้รับสับสนเมื่อ จัดการกับไฟล์ 1685 01:19:37,260 --> 01:19:38,730 >> เพราะถ้าเรามี - 1686 01:19:38,730 --> 01:19:41,260 ผมทำงานออกจากพื้นที่ 1687 01:19:41,260 --> 01:19:46,490 หากเป็นไฟล์ของเราและเราได้ว่า หนึ่งพิกเซลมีและเราต้องการที่จะนำมัน 1688 01:19:46,490 --> 01:19:49,840 ที่นั่นเรายังมีบางสิ่งบางอย่าง จำเป็นที่จะต้องไปที่นั่นเมื่อเราอยู่ที่ 1689 01:19:49,840 --> 01:19:51,450 การเขียนและการสร้างไฟล์ใหม่ของเรา - 1690 01:19:51,450 --> 01:19:53,250 ไฟล์ของเราที่เป็นใหญ่เป็นสองเท่าของ 1691 01:19:53,250 --> 01:19:56,820 >> แต่มันก็ยากมากที่มีฟังก์ชั่นไฟล์ ที่จะข้ามไปรอบ ๆ เพื่อขึ้นบรรทัดใหม่ 1692 01:19:56,820 --> 01:20:00,260 เช่นนั้นแล้วก็จะกลับไปที่นี่ และนำสิ่งที่อยู่ในนั้น 1693 01:20:00,260 --> 01:20:04,500 มันเป็นไปไม่ได้เกือบที่จะทำบางสิ่งบางอย่าง เช่นนั้นหากที่ทำให้รู้สึก 1694 01:20:04,500 --> 01:20:10,180 ดังนั้นหากเราคิดในแง่ของแถวที่เราสามารถทำได้ ใช้แถวของเราและใส่แล้วมัน - 1695 01:20:10,180 --> 01:20:11,720 ทำซ้ำแถวในแนวตั้ง 1696 01:20:11,720 --> 01:20:15,860 >> และนั่นคือวิธีที่เราจัดการกับการปรับขนาด ในแนวตั้งมากกว่าแนวนอน 1697 01:20:15,860 --> 01:20:18,810 นั่นคือชนิดของรวดเร็วและ ทำให้เกิดความสับสนเล็กน้อย 1698 01:20:18,810 --> 01:20:22,375 แต่น่าเสียดายที่เวลาของเราจะขึ้น 1699 01:20:22,375 --> 01:20:27,340 ฉันจะยืนอยู่นอกสำหรับผู้ที่คุณ ที่นี่ที่มีคำถามเกี่ยวกับ 1700 01:20:27,340 --> 01:20:30,500 ปัญหาชุดรวมทั้งการกู้คืน 1701 01:20:30,500 --> 01:20:32,320 >> จึงขอเลื่อนออกไปตอนนี้ 1702 01:20:32,320 --> 01:20:34,480 และอีกครั้งถ้าคุณมีคำถามใด ๆ เราสามารถแชทได้ออกไปข้างนอก 1703 01:20:34,480 --> 01:20:38,294