1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [เล่นดนตรี] 3 00:00:11,210 --> 00:00:12,100 >> ROB Boden: ทั้งหมดขวา 4 00:00:12,100 --> 00:00:15,620 ดังนั้นสิ่งแรกที่แรกของวิดีโอ จากใบหน้าที่คุ้นเคย 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [วิดีโอเล่นภาพ] 7 00:00:22,560 --> 00:00:23,370 >> ทั้งหมดขวา 8 00:00:23,370 --> 00:00:27,150 นี้เป็น CS50 และนี่คือ จุดเริ่มต้นของสัปดาห์ที่สาม 9 00:00:27,150 --> 00:00:29,980 ฉันขอโทษฉันไม่สามารถจะมีกับคุณ ในวันนี้ แต่ให้ฉันแนะนำ 10 00:00:29,980 --> 00:00:32,880 CS50 ของตัวเองร็อบ Boden 11 00:00:32,880 --> 00:00:33,872 >> [จบ VIDEO เล่นภาพ] 12 00:00:33,872 --> 00:00:39,340 >> [เสียงปรบมือไชโย] 13 00:00:39,340 --> 00:00:41,277 >> ROB Boden: ผลงานใน วิดีโอที่ยอดเยี่ยม 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 ขวาทั้งหมด 16 00:00:47,770 --> 00:00:50,960 ดังนั้นครั้งแรกที่มีอาหารกลางวันอีก 17 00:00:50,960 --> 00:00:52,330 มันเป็นวันพรุ่งนี้ที่ 1:15 18 00:00:52,330 --> 00:00:54,480 มีอาหารกลางวันไม่ได้วันศุกร์นี้ 19 00:00:54,480 --> 00:00:55,810 มันขึ้นอยู่กับ Quora 20 00:00:55,810 --> 00:01:00,190 และทอมมี่เป็นไม่ได้ที่นี่ แต่อย่างใดอย่างหนึ่ง ผู้คนที่นั่นเป็นอดีต CF หัว 21 00:01:00,190 --> 00:01:01,530 ทอมมี่ McWilliam 22 00:01:01,530 --> 00:01:02,730 ดังนั้นเขาจึงเป็นคนที่สนุก 23 00:01:02,730 --> 00:01:04,819 คุณควรจะมา 24 00:01:04,819 --> 00:01:05,900 >> ขวาทั้งหมด 25 00:01:05,900 --> 00:01:11,360 ดังนั้นเมื่อสัปดาห์ที่แล้วเราเริ่มต้นการทำลายออกจากกัน เกี่ยวกับสิ่งที่สายจริงๆ 26 00:01:11,360 --> 00:01:14,830 เราได้รู้จักกันตั้งแต่เริ่มต้นที่ เป็นลำดับของตัวอักษร 27 00:01:14,830 --> 00:01:18,130 แต่สัปดาห์ที่ผ่านมาเรา delved เข้าสู่ความเป็นจริง ว่าสิ่งที่เป็นจริงลำดับของ 28 00:01:18,130 --> 00:01:22,110 ตัวละครที่ดีตอนนี้เรามี อาร์เรย์ของตัวอักษร 29 00:01:22,110 --> 00:01:26,450 และเรารู้ว่าสตริงเป็นอาร์เรย์ ของตัวละครในตอนท้ายมาก 30 00:01:26,450 --> 00:01:30,920 เรามีนี้ null ไบต์พิเศษนี้ เครื่องหมาย 0, ที่ระบุในตอนท้ายของ 31 00:01:30,920 --> 00:01:32,230 สตริง 32 00:01:32,230 --> 00:01:36,970 >> และเพื่อให้สตริงเป็น array ของ ตัวละคร แต่เราสามารถมีมากกว่า 33 00:01:36,970 --> 00:01:39,530 เพียงแค่อาร์เรย์ของตัวอักษร เราสามารถมีอาร์เรย์ของใด ๆ 34 00:01:39,530 --> 00:01:40,890 ประเภทของสิ่งที่เราต้องการ 35 00:01:40,890 --> 00:01:51,570 ดังนั้นถ้าคุณจำได้จากสัปดาห์ที่ผ่านมา โปรแกรมยุคที่เดวิดแนะนำ 36 00:01:51,570 --> 00:01:53,560 อย่างรวดเร็วจริงๆ 37 00:01:53,560 --> 00:01:57,010 ดังนั้นสิ่งแรกที่เรากำลังจะทำคือ ขอให้ผู้ใช้สำหรับจำนวนเต็ม 38 00:01:57,010 --> 00:01:58,800 จำนวนของคนที่อยู่ในห้องพัก 39 00:01:58,800 --> 00:02:01,260 เมื่อเรามีจำนวนเต็มว่า เรากำลังประกาศอาร์เรย์ 40 00:02:01,260 --> 00:02:02,890 ขอให้สังเกตไวยากรณ์วงเล็บนี้ 41 00:02:02,890 --> 00:02:04,540 คุณจะได้รับใช้ว่า 42 00:02:04,540 --> 00:02:09,430 >> ดังนั้นเราประกาศอาร์เรย์ของจำนวนเต็ม ที่เรียกว่าเพศทุกวัยและมี n 43 00:02:09,430 --> 00:02:12,080 จำนวนเต็มในอาร์เรย์นี้ 44 00:02:12,080 --> 00:02:16,480 ดังนั้นรูปแบบนี้ที่นี่ 4 int i เท่ากับ 0, i น้อยกว่า n, i บวก 45 00:02:16,480 --> 00:02:20,580 บวกว่ายังจะเป็นรูปแบบ ที่คุณได้รับใช้มากในการ 46 00:02:20,580 --> 00:02:24,000 เพราะที่สวยมากวิธีการที่คุณกำลัง เสมอไปย้ำกว่าอาร์เรย์ 47 00:02:24,000 --> 00:02:26,330 ดังนั้นจำไว้ว่า n คือ ความยาวของอาร์เรย์ของเรา 48 00:02:26,330 --> 00:02:32,120 และอื่น ๆ ที่นี่เราจะถามซ้ำ ๆ สำหรับอายุของฉันของคนในห้อง 49 00:02:32,120 --> 00:02:36,640 >> หลังจากนี้เราลงไปและสำหรับสิ่งที่ เหตุผลโดยพลการเราแล้ว 50 00:02:36,640 --> 00:02:40,220 พิมพ์ออกมาวิธีการเดิมที่พวกเขากำลังจะ จะเป็นปีต่อจากนี้ 51 00:02:40,220 --> 00:02:49,980 และการเรียกใช้โปรแกรมที่ให้ ทำให้วัยวัยเฉือนจุด 52 00:02:49,980 --> 00:02:53,010 ดังนั้นผู้คนจำนวนมากในห้องพักที่ สมมติว่ามีสาม 53 00:02:53,010 --> 00:02:59,880 และพูดว่าคนแรกคือ 13, ต่อไปคือ 26 และสุดท้ายคือ 30 54 00:02:59,880 --> 00:03:05,080 ดังนั้นแล้วมันจะย้ำกว่าทั้งสาม คนพิมพ์ออกมา 14, 27, และ 31 55 00:03:05,080 --> 00:03:16,060 >> ดังนั้นจำไว้ว่าเมื่อเราประกาศ อาร์เรย์ของขนาด n ดัชนีในการที่ 56 00:03:16,060 --> 00:03:19,950 อาร์เรย์อาร์เรย์มีค่านิยมและ ดัชนี 0, 1, 2, ตลอดทาง 57 00:03:19,950 --> 00:03:21,680 ถึง n ลบ 1 58 00:03:21,680 --> 00:03:26,255 ดังนั้นเมื่อเรากล่าวว่ามีสามคน ในห้องพักและเราวางไว้ในที่นี่ 59 00:03:26,255 --> 00:03:29,850 ซ้ำเป็นครั้งแรกผ่านทางนี้ ห่วงฉันจะเป็น 0 60 00:03:29,850 --> 00:03:31,650 ดังนั้นในดัชนี 0 61 00:03:31,650 --> 00:03:34,540 เราจะกำหนดเป็นครั้งแรก อายุผู้ใช้ป้อน 62 00:03:34,540 --> 00:03:38,870 จากนั้นในปีถัดไปเรากำลังเข้าสู่ n ที่สองผู้ใช้ป้อนและใน 63 00:03:38,870 --> 00:03:40,580 ถัดจากสอง n ล่าสุด 64 00:03:40,580 --> 00:03:44,200 >> เพื่อแจ้งให้ทราบว่าอาร์เรย์ของขนาด สามไม่ได้มีอะไร 65 00:03:44,200 --> 00:03:46,040 ในดัชนีสาม 66 00:03:46,040 --> 00:03:49,036 นี้ไม่ถูกต้อง 67 00:03:49,036 --> 00:03:50,250 ขวาทั้งหมด 68 00:03:50,250 --> 00:03:55,136 ดังนั้นจะกลับมาที่นี่ 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 ดังนั้นขณะนี้ที่เราได้กระทำกับอาร์เรย์ เรามีความคุ้นเคยบาง 71 00:04:01,590 --> 00:04:03,780 ตอนนี้เรากำลังจะย้ายไปยังคำสั่ง อาร์กิวเมนต์บรรทัดซึ่งเป็นไปได้ 72 00:04:03,780 --> 00:04:05,890 สวยที่เกี่ยวข้องกับปัญหาการตั้งค่านี้ 73 00:04:05,890 --> 00:04:09,670 >> ดังนั้นจนถึงขณะนี้เมื่อใดก็ตามที่คุณได้ ประกาศฟังก์ชั่นหลักของเราได้ 74 00:04:09,670 --> 00:04:11,230 เป็นโมฆะหลัก int กล่าวว่า 75 00:04:11,230 --> 00:04:14,070 ดังนั้นเป็นโมฆะก็หมายความว่า เราไม่ได้ผ่านการใด ๆ 76 00:04:14,070 --> 00:04:16,440 ข้อโต้แย้งที่ฟังก์ชั่นนี้ 77 00:04:16,440 --> 00:04:19,190 ตอนนี้เรากำลังจะไปดูหลักที่ สามารถใช้ข้อโต้แย้งบาง 78 00:04:19,190 --> 00:04:22,470 ที่นี่เราเรียกพวกเขา int argc และวงเล็บสตริง argv 79 00:04:22,470 --> 00:04:26,930 วงเล็บอีกครั้งหนึ่งที่แสดงให้เห็น ที่เราจัดการกับอาร์เรย์ 80 00:04:26,930 --> 00:04:31,850 ดังนั้นที่นี่วงเล็บสตริง argv เรา จัดการกับอาร์เรย์ของสตริง 81 00:04:31,850 --> 00:04:35,360 ดังนั้น argc, ที่จะบ่งบอกถึง กี่ข้อโต้แย้งที่เราได้ 82 00:04:35,360 --> 00:04:37,580 ส่งผ่านไปยังโปรแกรมนี้ 83 00:04:37,580 --> 00:04:46,050 และเพื่อดูว่าอะไรที่หมายความว่า ขอปิดนี้ 84 00:04:46,050 --> 00:04:46,490 >> ตกลง 85 00:04:46,490 --> 00:04:50,790 ดังนั้นจนถึงขณะนี้เราได้ดำเนินการทุก โปรแกรมเช่นวัยเฉือนจุด 86 00:04:50,790 --> 00:04:55,250 นอกจากนี้เรายังสามารถที่บรรทัดคำสั่งที่ผ่านมา ผ่านการขัดแย้งจึงคำสั่ง 87 00:04:55,250 --> 00:04:56,550 อาร์กิวเมนต์บรรทัด 88 00:04:56,550 --> 00:04:59,760 ดังนั้นอาร์กิวเมนต์แรกสวัสดีโลก 89 00:04:59,760 --> 00:05:03,350 ดังนั้นที่นี่ argc จะสาม 90 00:05:03,350 --> 00:05:07,720 มันนับของการขัดแย้ง ที่บรรทัดคำสั่ง 91 00:05:07,720 --> 00:05:12,840 argc อยู่เสมออย่างน้อย 1 เนื่องจากจุด เฉือนวัยตัวเองนับว่าเป็นหนึ่งใน 92 00:05:12,840 --> 00:05:14,490 อาร์กิวเมนต์บรรทัดคำสั่ง 93 00:05:14,490 --> 00:05:17,010 >> แล้วทักทายเป็นครั้งแรกที่ 94 00:05:17,010 --> 00:05:20,460 หากวัยเฉือนจุดเป็น 0 แล้ว สวัสดีเป็นครั้งแรกและโลกเป็น 95 00:05:20,460 --> 00:05:22,830 อาร์กิวเมนต์บรรทัดคำสั่งที่สอง 96 00:05:22,830 --> 00:05:29,490 ดังนั้น argv สตริงที่เรากำลังจะได้เห็น สตริงมีจุดเฉือน 97 00:05:29,490 --> 00:05:33,830 วัยสวัสดีและโลก 98 00:05:33,830 --> 00:05:38,945 และโดยการร้องขอของเดวิดเราจะ ในการเล่นวิดีโอแนะนำว่า 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [วิดีโอเล่นภาพ] 101 00:05:43,890 --> 00:05:46,240 >> -จนถึงตอนนี้ในโปรแกรมของเราได้ เขียนที่เราได้ประกาศ 102 00:05:46,240 --> 00:05:48,500 หลักเป็นโมฆะหลักเป็น int 103 00:05:48,500 --> 00:05:51,170 และทุกเวลานี้เป็นโมฆะว่ามี เพียงแค่ได้รับการระบุว่า 104 00:05:51,170 --> 00:05:54,430 โปรแกรมไม่ได้ใช้ใด ๆ อาร์กิวเมนต์บรรทัดคำสั่ง 105 00:05:54,430 --> 00:05:57,750 ในคำอื่น ๆ เมื่อผู้ใช้ทำงาน โปรแกรมที่เขาหรือเธอสามารถให้คำสั่ง 106 00:05:57,750 --> 00:06:01,710 อาร์กิวเมนต์บรรทัดโดยการเขียนเพิ่มเติม คำหรือวลีหลังจากโปรแกรม 107 00:06:01,710 --> 00:06:03,000 ชื่อที่พรอมต์ 108 00:06:03,000 --> 00:06:06,550 >> ดีคุณถ้าคุณไม่ต้องการให้โปรแกรมของคุณไปยัง ใช้อาร์กิวเมนต์บรรทัดคำสั่งอย่างใดอย่างหนึ่งหรือ 109 00:06:06,550 --> 00:06:10,540 คำดังกล่าวมากขึ้นเราต้องเปลี่ยน เป็นโมฆะกับคู่ของการขัดแย้ง 110 00:06:10,540 --> 00:06:12,200 ถ้าอย่างนั้นเรามาดูกันเลยว่า 111 00:06:12,200 --> 00:06:15,750 รวม CS50.h. 112 00:06:15,750 --> 00:06:19,360 รวม io.h. มาตรฐาน 113 00:06:19,360 --> 00:06:20,760 int หลัก 114 00:06:20,760 --> 00:06:26,330 และตอนนี้แทนที่จะเป็นโมฆะฉันกำลังจะไป ระบุ int argc เรียกว่าและ 115 00:06:26,330 --> 00:06:28,780 อาร์เรย์ของสตริงที่เรียกว่า argv 116 00:06:28,780 --> 00:06:31,820 ตอนนี้ argc และ argv เป็น เพียงแค่การประชุม 117 00:06:31,820 --> 00:06:34,000 >> เราสามารถเรียกว่าอาร์กิวเมนต์เหล่านี้ อะไรที่เราต้องการมากที่สุด 118 00:06:34,000 --> 00:06:37,630 แต่สิ่งที่สำคัญคือว่า argc เป็น int เพราะโดยความหมายก็คือ 119 00:06:37,630 --> 00:06:41,360 จะมีนับอาร์กิวเมนต์ จำนวนคำทั้งหมดที่ 120 00:06:41,360 --> 00:06:43,380 ผู้ใช้พิมพ์ได้ที่พรอมต์ของเขาหรือเธอ 121 00:06:43,380 --> 00:06:47,910 argv ขณะที่การโต้แย้งเวกเตอร์เป็น จะจริงจะเก็บอาร์เรย์ 122 00:06:47,910 --> 00:06:52,020 ทุกคำที่ผู้ใช้มี พิมพ์ที่พรอมต์ของเขาหรือเธอ 123 00:06:52,020 --> 00:06:54,500 >> ให้ดำเนินการต่อไปที่จะทำบางสิ่งบางอย่างในขณะนี้ กับหนึ่งหรือมากกว่านี้ 124 00:06:54,500 --> 00:06:55,660 อาร์กิวเมนต์บรรทัดคำสั่ง 125 00:06:55,660 --> 00:07:00,070 โดยเฉพาะอย่างยิ่งให้ไปข้างหน้าและการพิมพ์ สิ่งที่คำว่าผู้ใช้ 126 00:07:00,070 --> 00:07:03,960 หลังชื่อของโปรแกรม ที่พรอมต์ 127 00:07:03,960 --> 00:07:04,730 เปิดวงเล็บ 128 00:07:04,730 --> 00:07:06,240 ปิดวงเล็บ 129 00:07:06,240 --> 00:07:10,510 ร้อยละ printf s เครื่องหมายและจุลภาค 130 00:07:10,510 --> 00:07:14,550 และตอนนี้ฉันต้องการที่จะบอก printf ค่าสิ่งที่ ที่จะเสียบเข้ากับตัวยึดที่ 131 00:07:14,550 --> 00:07:18,600 ฉันต้องการคำแรกที่ผู้ใช้มี พิมพ์หลังชื่อของโปรแกรม 132 00:07:18,600 --> 00:07:23,130 และดังนั้นฉันจะต้องระบุ argv วงเล็บ 1 ใกล้ 133 00:07:23,130 --> 00:07:24,830 วงเล็บเครื่องหมายอัฒภาค 134 00:07:24,830 --> 00:07:27,290 >> ตอนนี้ทำไมวงเล็บ 1 และไม่ยึด 0? 135 00:07:27,290 --> 00:07:30,990 ดีก็จะเปิดออกมาเก็บไว้โดยอัตโนมัติ ใน argv 0 เป็นไปได้ 136 00:07:30,990 --> 00:07:32,620 ชื่อจริงของโปรแกรม 137 00:07:32,620 --> 00:07:36,180 ดังนั้นคำแรกที่ผู้ใช้ หลังชื่อของโปรแกรมคือโดย 138 00:07:36,180 --> 00:07:38,990 การประชุมจะเป็น เก็บไว้ใน argv 1 139 00:07:38,990 --> 00:07:42,380 ตอนนี้ขอรวบรวมและ รันโปรแกรมนี้ 140 00:07:42,380 --> 00:07:47,780 >> ทำให้ argv 0 จุดเฉือน argv 0 141 00:07:47,780 --> 00:07:50,520 และตอนนี้คำว่าสวัสดี 142 00:07:50,520 --> 00:07:51,670 เข้าสู่ 143 00:07:51,670 --> 00:07:53,520 และมีเรามีมันสวัสดี 144 00:07:53,520 --> 00:07:55,750 >> [จบ VIDEO เล่นภาพ] 145 00:07:55,750 --> 00:07:57,000 >> ROB Boden: ทั้งหมดขวา 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 ปิดที่ 148 00:08:01,230 --> 00:08:16,730 ดังนั้นการดูที่โปรแกรมที่ว่า เราเพียงแค่แนะนำให้รู้จักกับเราดีเพียง 149 00:08:16,730 --> 00:08:24,710 เพื่อแสดงให้เห็นว่าถ้าเราพิมพ์ argv 0, ทำตอนนี้ สิ่งที่มันเป็น argv 0 จุดเฉือน argv 0 150 00:08:24,710 --> 00:08:30,440 ดังนั้นตามที่คาดไว้ก็พิมพ์ออก ชื่อของโปรแกรมตั้งแต่ argv 0 151 00:08:30,440 --> 00:08:32,970 เสมอไปเป็น ชื่อของโปรแกรม 152 00:08:32,970 --> 00:08:35,640 แต่ขอทำอะไรบางอย่าง บิตน่าสนใจมากขึ้น 153 00:08:35,640 --> 00:08:42,080 >> ดังนั้นในชุดปัญหาคุณจะ แนะนำให้รู้จักกับฟังก์ชั่นนี้ atoi 154 00:08:42,080 --> 00:08:44,440 ดังนั้นสิ่งที่เราจะใช้ atoi หา 155 00:08:44,440 --> 00:08:48,550 ที่จะแปลง สตริงเป็นจำนวนเต็ม 156 00:08:48,550 --> 00:08:53,280 ดังนั้นถ้าผมผ่านสตริงที่หนึ่งสองสาม การ atoi, ที่จะแปลงที่ 157 00:08:53,280 --> 00:08:56,910 เป็นจำนวนเต็มหนึ่งสองสาม 158 00:08:56,910 --> 00:09:01,480 ดังนั้นเรากำลังจะแปลงแรก อาร์กิวเมนต์บรรทัดคำสั่งเพื่อจำนวนเต็ม 159 00:09:01,480 --> 00:09:05,690 และจากนั้นเพียงแค่พิมพ์เลขที่ 160 00:09:05,690 --> 00:09:09,680 >> ดังนั้นโดยทั่วไปเราชนิดของ reimplementing GetInt เพียง 161 00:09:09,680 --> 00:09:12,350 จำนวนเต็มถูกป้อนคำสั่ง สายแทนในโปรแกรม 162 00:09:12,350 --> 00:09:14,560 โต้ตอบ 163 00:09:14,560 --> 00:09:23,170 ดังนั้นแล้วทำให้ argv 0, ขอทำ มันอยู่ในที่นี่และใกล้ชิดว่า 164 00:09:23,170 --> 00:09:27,670 ดังนั้นการทำงาน argv 0 และให้ใส่ จำนวนเต็มหนึ่งสองสามสี่หนึ่งสอง 165 00:09:27,670 --> 00:09:30,840 ดังนั้นมันจะพิมพ์เลขหนึ่ง สองสามสี่หนึ่งสอง 166 00:09:30,840 --> 00:09:35,500 มีรายละเอียดอื่นที่จะ atoi ที่ มันจะหยุดดูแลเกี่ยวกับอะไร 167 00:09:35,500 --> 00:09:39,040 เกินตัวอักษรตัวเลขที่ถูกต้อง แต่ที่ไม่ได้เรื่อง 168 00:09:39,040 --> 00:09:42,870 >> ดังนั้นสิ่งที่คุณคิดว่าจะเกิดขึ้น ถ้าผมทำเช่นนี้? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 ความผิดส่วน 171 00:09:47,050 --> 00:09:50,410 ดังนั้นทำไมว่าคืออะไร 172 00:09:50,410 --> 00:09:56,060 ถ้าคุณมองกลับไปที่โปรแกรมของเราเรา แปลง argv 1 อาร์กิวเมนต์แรก 173 00:09:56,060 --> 00:09:59,610 หลังจากที่ชื่อของโปรแกรมที่เป็นจำนวนเต็ม 174 00:09:59,610 --> 00:10:03,350 แต่มีข้อโต้แย้งที่ผ่านมาไม่มี หลังจากที่ชื่อโปรแกรม 175 00:10:03,350 --> 00:10:08,060 ดังนั้นที่นี่เราจะเห็นว่านี้เป็นรถ โปรแกรมเนื่องจากถ้าเราพยายามที่จะเรียกใช้ 176 00:10:08,060 --> 00:10:10,530 โดยไม่มีข้อโต้แย้งใด ๆ มันก็จะผิดพลาด 177 00:10:10,530 --> 00:10:16,950 >> ดังนั้นอีกรูปแบบทั่วไปที่คุณจะเห็น เป็นสิ่งที่ต้องการถ้า argc น้อย 178 00:10:16,950 --> 00:10:21,100 กว่าสองแสดงให้เห็นว่ามีไม่ อย่างน้อยชื่อโปรแกรมและ 179 00:10:21,100 --> 00:10:29,100 อาร์กิวเมนต์แรกแล้วเราจะทำอะไรบางอย่าง เช่น printf ไม่เพียงพอ 180 00:10:29,100 --> 00:10:31,190 อาร์กิวเมนต์บรรทัดคำสั่ง 181 00:10:31,190 --> 00:10:33,170 ที่อาจไม่เป็นอย่างใดอย่างหนึ่งที่ดีในการพิมพ์ มันอาจจะเป็นบางสิ่งบางอย่างเช่น 182 00:10:33,170 --> 00:10:35,440 คุณควรจะใส่จำนวนเต็ม ที่บรรทัดคำสั่ง 183 00:10:35,440 --> 00:10:37,450 ฉันเพิ่งจะจบมันมี 184 00:10:37,450 --> 00:10:39,600 แล้วกลับ 1 185 00:10:39,600 --> 00:10:44,740 ดังนั้นจำไว้ว่าที่ส่วนท้ายของของเรา โปรแกรมถ้าเรากลับ 0, การจัดเรียงของที่ 186 00:10:44,740 --> 00:10:47,060 บ่งบอกถึงความสำเร็จ 187 00:10:47,060 --> 00:10:50,940 และหลักโดยอัตโนมัติ กลับ 0 ถ้าคุณทำไม่ได้ 188 00:10:50,940 --> 00:10:55,800 >> ดังนั้นที่นี่เรากำลัง retuning 1 เพื่อแสดงให้เห็น ว่าที่ไม่ประสบความสำเร็จ 189 00:10:55,800 --> 00:11:01,000 และคุณสามารถกลับสิ่งที่คุณต้องการ เพียง 0 บ่งชี้ว่าประสบความสำเร็จและ 190 00:11:01,000 --> 00:11:03,390 สิ่งอื่น ๆ ที่แสดงให้เห็นความล้มเหลว 191 00:11:03,390 --> 00:11:04,855 จึงขอใช้รุ่นของสิ่งนี้ 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 ดังนั้นตอนนี้ถ้าเราไม่ได้ป้อนบรรทัดคำสั่ง โต้แย้งได้อย่างถูกต้องจะบอก 194 00:11:16,600 --> 00:11:18,290 เราบรรทัดคำสั่งไม่เพียงพอ 195 00:11:18,290 --> 00:11:20,610 ยังพูดไม่จบประโยค 196 00:11:20,610 --> 00:11:24,950 อื่นถ้าเราผ่านมันจริงอย่างใดอย่างหนึ่ง มันสามารถดำเนินการโปรแกรม 197 00:11:24,950 --> 00:11:27,920 ดังนั้นนี่คือวิธีการที่คุณจะใช้ใน argc เพื่อที่จะตรวจสอบจำนวนของ 198 00:11:27,920 --> 00:11:30,630 อาร์กิวเมนต์บรรทัดคำสั่งที่ ถูกส่งผ่านจริง 199 00:11:30,630 --> 00:11:39,360 >> ดังนั้นขอให้โปรแกรมนี้อีกเล็กน้อย ที่ซับซ้อนและดูที่สอง 200 00:11:39,360 --> 00:11:42,180 ย้ำในสิ่งที่ 201 00:11:42,180 --> 00:11:46,310 ดังนั้นตอนนี้เราไม่ได้เพียงแค่พิมพ์ อาร์กิวเมนต์บรรทัดคำสั่งแรก 202 00:11:46,310 --> 00:11:51,210 ที่นี่เรากำลัง iterating จาก int i เท่ากับ 0, i น้อยกว่า argc ฉันบวก 203 00:11:51,210 --> 00:11:55,280 บวกและการพิมพ์ argv ดัชนีฉัน 204 00:11:55,280 --> 00:11:59,300 ดังนั้นรูปแบบนี้อีกครั้งนี้ก็เช่นเดียวกัน รูปแบบที่เป็นก่อนที่จะยกเว้นแทน 205 00:11:59,300 --> 00:12:02,600 ของการเรียกตัวแปร n เรากำลังใช้ argc 206 00:12:02,600 --> 00:12:09,520 >> ดังนั้นนี้จะวนไปแต่ละดัชนี ในอาร์เรย์และการพิมพ์แต่ละ 207 00:12:09,520 --> 00:12:11,910 องค์ประกอบในอาร์เรย์ 208 00:12:11,910 --> 00:12:20,300 ดังนั้นเมื่อเรารันโปรแกรมนี้เป็นอย่างดี ผมไม่ได้ป้อนบรรทัดคำสั่งใด ๆ 209 00:12:20,300 --> 00:12:22,540 ข้อโต้แย้งจึงเพียงแค่พิมพ์ ชื่อโปรแกรม 210 00:12:22,540 --> 00:12:26,053 ถ้าฉันใส่พวงของสิ่งที่มันจะ พิมพ์หนึ่งในแต่ละบรรทัดของตนเอง 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> ตกลง 213 00:12:32,210 --> 00:12:34,770 จึงขอใช้เวลานี้ขั้นตอนต่อไป 214 00:12:34,770 --> 00:12:38,890 และแทนการพิมพ์แต่ละอาร์กิวเมนต์ ในสายของตัวเองให้พิมพ์แต่ละ 215 00:12:38,890 --> 00:12:42,590 ลักษณะของแต่ละอาร์กิวเมนต์ ในสายของตัวเอง 216 00:12:42,590 --> 00:12:46,700 ดังนั้นจำไว้ว่า argv เป็น อาร์เรย์ของสตริง 217 00:12:46,700 --> 00:12:50,960 ดังนั้นสิ่งที่เป็นสตริง แต่ อาร์เรย์ของตัวอักษร? 218 00:12:50,960 --> 00:12:57,140 ดังนั้นหมายความว่า argv เป็นจริง อาร์เรย์ของอาร์เรย์ของตัวอักษร 219 00:12:57,140 --> 00:13:04,920 ดังนั้นการใช้ประโยชน์จากการที่ ให้สนใจนี้สำหรับตอนนี้ 220 00:13:04,920 --> 00:13:08,190 ขอเพียงพิจารณาสตริง argv 0 221 00:13:08,190 --> 00:13:14,170 >> ดังนั้นหากเราต้องการที่จะนำตัวละครของแต่ละ argv 0 ในสายของตัวเองแล้วฉันต้องการ 222 00:13:14,170 --> 00:13:19,500 ที่จะทำในรูปแบบที่เรากำลังใช้ในการที่ฉันเป็น น้อยกว่าความยาวของแถวที่ 223 00:13:19,500 --> 00:13:23,990 ซึ่งที่นี่เป็นที่ของ strlen ที่ ไม่ใช่สิ่งที่ฉันต้องการจะทำสาย 224 00:13:23,990 --> 00:13:26,450 s เท่ากับ argv 0 225 00:13:26,450 --> 00:13:30,390 ดังนั้นฉันมีค่าน้อยกว่าความยาวของเรา อาร์เรย์ซึ่งในกรณีนี้เป็นอาร์เรย์ 226 00:13:30,390 --> 00:13:34,410 ของตัวละครที่ฉันบวกบวก 227 00:13:34,410 --> 00:13:41,040 ดังนั้นในขณะที่เราเห็นเมื่อสัปดาห์ที่แล้วมันเหมาะ ถ้าเราย้ายที่ strlen นอก 228 00:13:41,040 --> 00:13:45,210 ของสภาพตั้งแต่ n จะเพิ่ม strlen ของเวลาที่เราไปแต่ละ 229 00:13:45,210 --> 00:13:47,720 ผ่านห่วงและก็ จะไม่ได้มีการเปลี่ยนแปลง 230 00:13:47,720 --> 00:13:50,230 ดังนั้นเราจะตั้งค่าเท่ากับ n กว่าที่นี่ 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> ตกลง 233 00:13:55,170 --> 00:14:01,320 ดังนั้นตอนนี้เรากำลัง iterating กว่า ดัชนีในอาร์เรย์แต่ละ 234 00:14:01,320 --> 00:14:05,630 ดังนั้นถ้าเราต้องการที่จะพิมพ์แต่ละ ตัวละครในอาร์เรย์ที่ร้อยละคเป็น 235 00:14:05,630 --> 00:14:06,880 ธงที่เราต้องการที่จะใช้ สำหรับตัวอักษร 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 และตอนนี้ฉันวงเล็บเป็นไปได้ สตริงตัวอักษรที่ดัชนี i ดังนั้นหาก 238 00:14:19,770 --> 00:14:20,970 สตริงก็สวัสดี 239 00:14:20,970 --> 00:14:27,530 แล้ว s 0 เป็นไปได้ชั่วโมง s วงเล็บ 1 จะได้รับอีเมลและอื่น ๆ 240 00:14:27,530 --> 00:14:30,800 >> ดังนั้นตอนนี้เราต้องการที่จะรวม เหล่านี้สองสิ่ง 241 00:14:30,800 --> 00:14:35,440 เราต้องการที่จะพิมพ์ตัวอักษรแต่ละตัว ของแต่ละอาร์กิวเมนต์บรรทัดคำสั่ง 242 00:14:35,440 --> 00:14:38,950 ดังนั้นเรากำลังจะมี สำหรับวงซ้อนกัน 243 00:14:38,950 --> 00:14:47,480 และอัตภาพเคาน์เตอร์แรก เป็นฉันต่อไปจะเป็นเจ n 244 00:14:47,480 --> 00:14:54,450 จะ strlen argv ของฉันที่ฉัน น้อยกว่า n, i บวกบวก 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 และตอนนี้แทนการพิมพ์ argv ฉันดังนั้น วงเล็บ argv ฉันจะไปดัชนี - 247 00:15:06,870 --> 00:15:14,280 ที่จะเป็นบรรทัดคำสั่งฉัน th- อาร์กิวเมนต์ argv i, j เป็นไป 248 00:15:14,280 --> 00:15:16,925 เป็นตัว jth ของ อาร์กิวเมนต์ลำดับที่ i 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 ฉันจะกำจัดนี้ขึ้นที่นี่ตอนนี้ นับตั้งแต่ที่เราใส่ลงในวงที่ 251 00:15:24,810 --> 00:15:33,900 ดังนั้นเท่ากับเท่ากับสตริง argv i และแล้ว s วงเล็บเจ 252 00:15:33,900 --> 00:15:36,980 >> ดีเราไม่จำเป็นต้องประกาศ ตัวแปรนี้ 253 00:15:36,980 --> 00:15:44,530 แต่เราเพิ่งจะรวมเหล่านี้ สองเป็นสิ่งที่เราได้ argv i, j 254 00:15:44,530 --> 00:15:45,780 >> ลำโพง 1: [ไม่ได้ยิน] 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB Boden: โทรดี 257 00:15:49,680 --> 00:15:52,936 ดังนั้นนี่เสีย 258 00:15:52,936 --> 00:15:55,510 ถ้าจริงผมวิ่งมันเราจะ ได้ตระหนักในเรื่องนี้ 259 00:15:55,510 --> 00:16:01,210 ดังนั้นเคาน์เตอร์ที่ผมดูแลเกี่ยวกับ ในเรื่องนี้โดยเฉพาะ 260 00:16:01,210 --> 00:16:05,410 เป็นห่วงเจทำซ้ำ 261 00:16:05,410 --> 00:16:08,560 ดังนั้นคุณจะได้ใช้เป็นประเด็น อาจจะห่วงอนันต์ถ้าเรา 262 00:16:08,560 --> 00:16:09,540 ไม่ได้รับการแก้ไขที่ 263 00:16:09,540 --> 00:16:12,220 นั่นเป็นเหตุผลที่เรายังพูดคุย เกี่ยวกับการแก้จุดบกพร่องของวันนี้ 264 00:16:12,220 --> 00:16:13,120 >> ตกลง 265 00:16:13,120 --> 00:16:15,240 จึงขอเรียกใช้โปรแกรมนี้ 266 00:16:15,240 --> 00:16:21,200 และขอจริงเพิ่ม printf แยก ที่นี่ที่เพิ่งจะพิมพ์ 267 00:16:21,200 --> 00:16:27,480 สายอื่นตั้งแต่นี้หมายความว่าเมื่อเรา เรียกใช้โปรแกรมจะมีที่ว่างเปล่า 268 00:16:27,480 --> 00:16:31,830 สายในระหว่างตัวละครของแต่ละ แต่ละอาร์กิวเมนต์บรรทัดคำสั่ง 269 00:16:31,830 --> 00:16:33,448 ดีเราจะเห็นสิ่งที่หมายถึง 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 oop 272 00:16:37,790 --> 00:16:39,870 มีข้อผิดพลาดบางอย่าง 273 00:16:39,870 --> 00:16:42,860 ข้อผิดพลาดโดยปริยายประกาศ ฟังก์ชัน strlen 274 00:16:42,860 --> 00:16:51,630 >> เพื่อที่จะกลับเข้ามาในโปรแกรมของเราฉัน ลืมที่จะรวมถึงการสับสตริง 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 ดังนั้นสตริงเป็นไปได้ ไฟล์ส่วนหัวที่ประกาศ 277 00:16:57,730 --> 00:16:58,980 strlen ฟังก์ชั่น 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 ตกลงมันคอมไพล์ 280 00:17:06,060 --> 00:17:09,109 ตอนนี้ขอใช้มัน 281 00:17:09,109 --> 00:17:10,930 ดังนั้นเพียงแค่ว่า 282 00:17:10,930 --> 00:17:17,790 มันจะพิมพ์ออกมาของเรา ชื่อโปรแกรมสวัสดีโลก 283 00:17:17,790 --> 00:17:23,510 มันจะพิมพ์แต่ละสิ่งแต่ละ ตัวอักษรในบรรทัดของตัวเอง 284 00:17:23,510 --> 00:17:24,540 ตกลง 285 00:17:24,540 --> 00:17:30,625 >> จึงขอใช้เวลานี้จริง หนึ่งในขั้นตอนต่อไป 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 และแทนการใช้สตริงให้ คิดเกี่ยวกับวิธีการที่เราจะดำเนินการของเราเอง 288 00:17:39,700 --> 00:17:41,420 ฟังก์ชัน strlen 289 00:17:41,420 --> 00:17:45,600 ดังนั้นฉันทันทีที่จะให้ ลายเซ็นฟังก์ชัน 290 00:17:45,600 --> 00:17:52,900 ดังนั้นขอเรียกใน my_strlen และก็ จะใช้สตริงเป็นอาร์กิวเมนต์ 291 00:17:52,900 --> 00:17:57,220 และเราคาดหวังที่จะกลับมา ความยาวของสตริงที่ 292 00:17:57,220 --> 00:18:03,430 ดังนั้นที่เป็นคนที่ 293 00:18:03,430 --> 00:18:04,990 ใช่ 294 00:18:04,990 --> 00:18:06,740 ตกลง 295 00:18:06,740 --> 00:18:12,900 ดังนั้นจำจากสไลด์ก่อนหน้านี้ว่า ยังจากเมื่อสัปดาห์ที่แล้วว่า 296 00:18:12,900 --> 00:18:18,890 อาร์เรย์ของตัวอักษรดีสตริง จึงขอกล่าวนี้เป็นของสตริงของเรา 297 00:18:18,890 --> 00:18:29,870 ดังนั้นถ้า s เป็นสตริงสวัสดีแล้ว H-E-L-L-O ในหน่วยความจำที่จะ 298 00:18:29,870 --> 00:18:35,610 เป็นแล้วเครื่องหมายนี้ 0 ตัวละคร 299 00:18:35,610 --> 00:18:39,170 >> ดังนั้นทำอย่างไรเราจะได้รับความยาวของ s? 300 00:18:39,170 --> 00:18:43,190 ดีเคล็ดลับที่กำลังมองหานี้ 0 ฟันเฟืองตัวอักษร null นี้ 301 00:18:43,190 --> 00:18:44,380 Terminator 302 00:18:44,380 --> 00:18:50,270 ดังนั้นขั้นตอนวิธีการเป็นไป จะเป็นสิ่งที่ชอบไม่กี่ 303 00:18:50,270 --> 00:18:51,510 พอที่จะทำให้ตัวละคร - 304 00:18:51,510 --> 00:18:56,180 ขอมีมือนี้เป็นตัวแทนของบาง เคาน์เตอร์ขอเรียก int ระยะเวลานี้ 305 00:18:56,180 --> 00:19:00,060 ดังนั้นการเริ่มต้นจากที่นี่เรา จะย้ำกว่าสตริงของเรา 306 00:19:00,060 --> 00:19:04,100 >> ดังนั้นตัวอักษรตัวแรกเป็นเอช และจะไม่กลับเฉือน 0 ดังนั้น 307 00:19:04,100 --> 00:19:05,170 ความยาว 1 308 00:19:05,170 --> 00:19:08,050 ย้ำกับตัวละครต่อไป E และมันก็ไม่ได้ทับขวา 0 309 00:19:08,050 --> 00:19:09,630 ความยาว 2 310 00:19:09,630 --> 00:19:10,960 L, 3 311 00:19:10,960 --> 00:19:11,850 L, 4 312 00:19:11,850 --> 00:19:13,050 O, 5 313 00:19:13,050 --> 00:19:16,690 และในที่สุดเราถึงเครื่องหมาย 0, และอื่น ๆ วิธีการที่ดี 314 00:19:16,690 --> 00:19:17,780 สายนี้มีมากกว่า 315 00:19:17,780 --> 00:19:20,130 จึงขอกลับ 5 316 00:19:20,130 --> 00:19:33,630 >> ดังนั้นการดำเนินการจริงที่แรก ระยะเวลาของฉัน n เท่ากับ 0 ขวามือของเรา 317 00:19:33,630 --> 00:19:36,088 และเรากำลังจะย้ำ - 318 00:19:36,088 --> 00:19:38,000 >> ลำโพง 1: [ไม่ได้ยิน] 319 00:19:38,000 --> 00:19:38,640 >> ROB Boden: โอ้ยิง 320 00:19:38,640 --> 00:19:39,870 โทรดี 321 00:19:39,870 --> 00:19:42,680 ความเจริญ 322 00:19:42,680 --> 00:19:44,140 ดังนั้นระยะเวลาใน n เท่ากับ 0 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 ดังนั้นตอนนี้ในขณะที่ระยะเวลาใน s ไม่ได้ เท่ากับแล้วเครื่องหมาย 0 325 00:19:58,310 --> 00:20:04,660 ดังนั้นจำเครื่องหมายนี้ 0 มันเป็น ตัวละครที่เกิดขึ้นจริงและมันแสดงให้เห็น 326 00:20:04,660 --> 00:20:05,820 จุดสิ้นสุดของสตริง 327 00:20:05,820 --> 00:20:09,850 เช่นเดียวกับยังเครื่องหมาย n เป็นตัวละครที่เกิดขึ้นจริง 328 00:20:09,850 --> 00:20:14,040 เครื่องหมาย 0 เป็นไปเพื่อแสดงให้เห็น ปลายสายของเรา 329 00:20:14,040 --> 00:20:15,414 ฉันไม่ต้องการที่จะใส่ที่มี 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 และในขณะที่การจัดทำดัชนี s โดยความยาวไม่ได้ เท่ากับเทอร์มิโมฆะแล้ว 332 00:20:25,620 --> 00:20:27,130 เรากำลังจะเพิ่มระยะเวลา 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 ดังนั้นแล้วในตอนท้ายของโปรแกรมของเรา ความยาวที่สุดไป 335 00:20:34,880 --> 00:20:37,610 เป็น 5 ในกรณีนี้ 336 00:20:37,610 --> 00:20:39,210 และเราก็จะกลับระยะเวลา 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> ตกลง 339 00:20:43,530 --> 00:20:48,290 ดังนั้นตอนนี้ลงที่นี่ที่ฉันทำไม่ได้ ทำ my_strlen 340 00:20:48,290 --> 00:20:50,700 ลองรวบรวมไว้เพื่อให้แน่ใจว่า ทุกอย่างทำงานได้อย่างราบรื่น 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 ผมทำใน 2 หรือไม่? 343 00:20:58,210 --> 00:21:00,565 หรือเป็นที่ 1? 344 00:21:00,565 --> 00:21:01,940 ว่าควรจะทำอย่างไร 345 00:21:01,940 --> 00:21:02,690 ขวาทั้งหมด 346 00:21:02,690 --> 00:21:08,490 ดังนั้นนี่คือ argv 2 347 00:21:08,490 --> 00:21:11,585 ทำงานตามที่คาดการณ์ไว้แม้ว่า เป็นที่หนึ่งที่ผมคิดว่ามันมีอะไรบ้าง 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 ใช่ 350 00:21:15,550 --> 00:21:16,760 ตกลง 351 00:21:16,760 --> 00:21:21,820 รุ่นของสิ่งนี้ไม่ได้มี บรรทัดใหม่หลังจาก printf แต่มัน 352 00:21:21,820 --> 00:21:22,910 ไม่ได้สร้างความแตกต่างใด ๆ 353 00:21:22,910 --> 00:21:23,300 ตกลง 354 00:21:23,300 --> 00:21:25,780 เพื่อทำงานตามที่คาดไว้ 355 00:21:25,780 --> 00:21:34,750 >> ตอนนี้เรายังสามารถรวมนี้ในขั้นตอนเดียว เพิ่มเติมที่แจ้งให้ทราบที่นี่ดี 356 00:21:34,750 --> 00:21:38,920 ครั้งแรกที่เรากำลังโลภ strlen ของ argv i และแล้วเรากำลัง iterating กว่า 357 00:21:38,920 --> 00:21:41,450 ตัวละครในแต่ละสายที่ 358 00:21:41,450 --> 00:21:47,480 ดังนั้นแทนที่จะทำที่สิ่งที่ถ้าเรา เพียงรวมตรรกะการรอคอยนี้ 359 00:21:47,480 --> 00:21:50,740 จนกว่าเราจะกดทับขวา 0 ขวา นี้ไม่ห่วง? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 ดังนั้นในขณะที่ย้ำ argv i, j ไม่ ไม่เครื่องหมายเท่ากับ 0 362 00:22:07,490 --> 00:22:10,680 จึงขอเรียกใช้ครั้งแรก 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> ขวาทั้งหมด 365 00:22:21,180 --> 00:22:27,655 ดังนั้นที่นี่สภาพนี้จะพูด - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 ให้ชัดเจนว่า 368 00:22:40,060 --> 00:22:49,140 ดังนั้นตอนนี้ปล่อยให้เรื่องนี้เป็น argv ของเรา 369 00:22:49,140 --> 00:22:55,290 ดังนั้นเมื่อฉันวิ่งโปรแกรมที่มาก่อน argv เป็นอาร์เรย์ของสตริง 370 00:22:55,290 --> 00:23:03,100 ดังนั้นถ้าผมทำงานกับ argv เฉือนจุด 2 สวัสดีชาวโลกแล้ว argv 371 00:23:03,100 --> 00:23:07,650 ตัวเองเป็นระยะเวลา 3 สำหรับ argv ศูนย์สวัสดีและโลก 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> และภายในของแต่ละดัชนีเหล่านี้คือ ตัวเองอาร์เรย์ที่นี้จะ 374 00:23:19,660 --> 00:23:23,780 จุดนี้จะเฉือน, ผมไม่ทราบว่า ถ้าเป็นทิศทางที่ถูกต้องผม 375 00:23:23,780 --> 00:23:25,680 ไม่ได้คิดว่ามันเป็น 376 00:23:25,680 --> 00:23:30,110 -R-V ชนต้องการพื้นที่เพิ่มขึ้น 377 00:23:30,110 --> 00:23:32,570 ลองตัดเป็นอาร์เรย์นี้ 378 00:23:32,570 --> 00:23:38,230 -R-V รีบ 0 แล้ว 0 ทับขวา 379 00:23:38,230 --> 00:23:43,160 แล้วในความระส่ำระสายจะสวัสดี 380 00:23:43,160 --> 00:23:45,910 สมมติว่า H-E เครื่องหมาย 0 381 00:23:45,910 --> 00:23:51,130 และสุดท้าย W-O เครื่องหมาย 0 382 00:23:51,130 --> 00:23:59,730 >> ดังนั้นวิธีที่เราเพียงแค่เขียน, ลูปซ้อนกันกับสิ่งที่พวกเขากำลัง 383 00:23:59,730 --> 00:24:07,321 ทำคือครั้งแรกที่เรามี เคาน์เตอร์ฉันแล้วเจ 384 00:24:07,321 --> 00:24:15,206 นี้จะง่ายขึ้นด้วยรหัสที่ หน้าจอให้กลับไปนี้ 385 00:24:15,206 --> 00:24:17,476 ตกลง 386 00:24:17,476 --> 00:24:24,600 เพื่อแจ้งให้ทราบว่าผมเป็นทำซ้ำที่ วนไปแต่ละคำสั่ง 387 00:24:24,600 --> 00:24:25,610 อาร์กิวเมนต์บรรทัด 388 00:24:25,610 --> 00:24:28,870 และเจ iterating ทำซ้ำ ผ่านตัวละครในแต่ละที่ 389 00:24:28,870 --> 00:24:30,410 อาร์กิวเมนต์บรรทัดคำสั่ง 390 00:24:30,410 --> 00:24:46,755 ดังนั้นสิ่งที่ printf สุดนี้จะทำ คือเราได้ printf argv 0 0, printf 391 00:24:46,755 --> 00:24:58,680 argv 0 1 printf argv 0 2 0 3 0 4 0 5 0 6 แต่ตอนนี้ argv 0 7 เป็นไป 392 00:24:58,680 --> 00:25:00,670 เครื่องหมายเท่ากับ 0 393 00:25:00,670 --> 00:25:05,730 >> ดังนั้นแล้วเราออกจากที่ห่วง และตอนนี้ฉัน iterates ถึง 1 394 00:25:05,730 --> 00:25:10,910 และตอนนี้เรากำลังจะพิมพ์ argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 ดีตอนนี้เพราะผมตัดสวัสดีระยะสั้น argv 1 2 เป็นอีกครั้งที่จะเป็น 396 00:25:17,040 --> 00:25:18,170 เครื่องหมาย 0 397 00:25:18,170 --> 00:25:25,050 และเพื่อเพิ่มฉันและดำเนินการต่อและ อื่น ๆ จนเราพิมพ์ออกทั้งหมดของ 398 00:25:25,050 --> 00:25:28,580 โลกและผู้ที่มีบรรทัดคำสั่งสาม ข้อโต้แย้งและเราจะออกจาก 399 00:25:28,580 --> 00:25:31,670 ห่วงนอกสุดและ จบโปรแกรมของเรา 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 ตกลง 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> จึงขอกลับมาที่นี่ 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 ดังนั้นคุณจะได้รับความคุ้นเคยกับบาง อาร์กิวเมนต์บรรทัดคำสั่งเกี่ยวกับเรื่องนี้ 406 00:25:52,370 --> 00:25:54,460 โดยเฉพาะอย่างยิ่งปัญหาการตั้งค่า 407 00:25:54,460 --> 00:25:56,630 >> ตอนนี้การแก้จุดบกพร่อง 408 00:25:56,630 --> 00:26:01,680 ดังนั้นคุณอาจมีอยู่แล้วที่จะทำ การแก้จุดบกพร่องที่มีก่อนหน้านี้บางส่วน 409 00:26:01,680 --> 00:26:03,120 ชุดปัญหา 410 00:26:03,120 --> 00:26:08,420 และเป็นหนึ่งในวิธีที่ง่ายมากของการแก้จุดบกพร่อง แรกให้ดูที่โปรแกรมรถ 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 ดีที่เดินผ่านโปรแกรมนี้ เราจะขอให้ผู้ใช้ 413 00:26:23,830 --> 00:26:29,350 จำนวนเต็มคว้าจำนวนเต็มที่แล้ว พลเรามีวงในขณะที่ 414 00:26:29,350 --> 00:26:32,280 เป็นเพียงจะพร่อง ฉันจนกว่าจะเท่ากับ 10 415 00:26:32,280 --> 00:26:35,820 ขอเพียงสมมติผมเข้ามา จำนวนเต็มมากกว่า 10 416 00:26:35,820 --> 00:26:38,700 ดังนั้นพร่องฉันจนกว่าจะเท่ากับ 10 417 00:26:38,700 --> 00:26:42,630 >> และแล้วเราก็มีห่วงขณะที่อีก ว่าในขณะที่ฉันไม่เท่ากับ 0, เรา 418 00:26:42,630 --> 00:26:44,540 จะพร่อง i 3 419 00:26:44,540 --> 00:26:49,790 ดังนั้นหากคุณเห็นเจตนาของข้อผิดพลาด ที่นี่ก็ว่าจะพร่องนี้ฉันจะ 420 00:26:49,790 --> 00:26:57,010 เป็น 10 แล้วห่วงขณะนี้จะ ฉันลดลงจาก 10, 7, 4, 1, 421 00:26:57,010 --> 00:27:02,880 ลบ 2 เพื่อลบ 5, และอื่น ๆ อินฟินิตี้ลบตั้งแต่ฉันจะ 422 00:27:02,880 --> 00:27:05,920 ไม่จริงเท่ากับ 0 423 00:27:05,920 --> 00:27:08,610 แล้วที่ส่วนท้ายของโปรแกรมนี้ เรามีฟังก์ชั่น foo ซึ่งเป็น 424 00:27:08,610 --> 00:27:12,130 ที่เกิดขึ้นในการพิมพ์ออกมาที่ฉัน 425 00:27:12,130 --> 00:27:16,520 >> ดังนั้นนี่เป็นโปรแกรมระยะสั้นและน่ารำคาญ และข้อผิดพลาดที่เห็นได้ชัด 426 00:27:16,520 --> 00:27:18,790 โดยเฉพาะอย่างยิ่งหลังจากที่ฉันเพียงแค่ กล่าวว่าสิ่งที่เป็นข้อผิดพลาด 427 00:27:18,790 --> 00:27:24,840 แต่เจตนาที่นี่คือดีอาจนี้ จริงมีลักษณะเหมือนบางส่วนของของคุณ 428 00:27:24,840 --> 00:27:30,040 โซลูชั่นจากโลภจากที่ผ่านมา ปัญหาการตั้งค่าและบางทีคุณอาจจะมี 429 00:27:30,040 --> 00:27:32,800 บางวง จำกัด ในโปรแกรมของคุณ และคุณไม่มีความคิด 430 00:27:32,800 --> 00:27:34,100 สิ่งที่ทำให้มัน 431 00:27:34,100 --> 00:27:38,690 ดังนั้นเทคนิคการแก้จุดบกพร่องที่มีประโยชน์มาก คือเพียงแค่เพิ่ม printfs 432 00:27:38,690 --> 00:27:40,180 ทั่วรหัสของคุณ 433 00:27:40,180 --> 00:27:49,200 >> ดังนั้นที่นี่ฉันต้องการ printf นอก ในขณะที่วงแรก 434 00:27:49,200 --> 00:27:53,155 และที่นี่ฉันต้องการ printf, และฉันก็จะพิมพ์ฉัน 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 ฉันก็จะทำก่อนในขณะที่ห่วงฉัน 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 นอกที่สองในขณะที่วง 439 00:28:09,040 --> 00:28:12,170 อีกครั้งหนึ่งที่พิมพ์ภายใน จากที่นี่ค่าฉัน 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 และให้ทำงานนี้ 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> ดังนั้นการแก้ปัญหาการเฉือนจุด 444 00:28:24,800 --> 00:28:25,610 ใส่จำนวนเต็ม 445 00:28:25,610 --> 00:28:28,150 ขอทำ 13 446 00:28:28,150 --> 00:28:28,760 และความเจริญ 447 00:28:28,760 --> 00:28:33,300 เราจะเห็นว่าเรามีการวนลูปไม่มีที่สิ้นสุด ด้านในของวงในขณะที่สอง 448 00:28:33,300 --> 00:28:36,305 ดังนั้นตอนนี้เรารู้ว่าสิ่งที่เป็นข้อผิดพลาด 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 แต่ printf แก้จุดบกพร่องดีอย่างสมบูรณ์แบบ แต่เมื่อโปรแกรมของคุณได้รับ 451 00:28:45,610 --> 00:28:50,560 อีกต่อไปและมีความซับซ้อนมากขึ้นมี การแก้ปัญหาที่ซับซ้อนมากขึ้นเพื่อ 452 00:28:50,560 --> 00:28:51,705 ได้รับสิ่งที่ทำงาน 453 00:28:51,705 --> 00:28:52,955 เพื่อขอลบ printfs เหล่านี้ทั้งหมด 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 และขอให้แน่ใจว่าฉันไม่ได้ ผิดอะไร 456 00:29:08,896 --> 00:29:09,850 ตกลง 457 00:29:09,850 --> 00:29:14,180 >> ดังนั้นโปรแกรมที่เรากำลังจะ ที่จะแนะนำเรียกว่า 458 00:29:14,180 --> 00:29:16,715 GDB สำหรับ GNU ดีบักเกอร์ 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 ดีจริงให้เอาออกเพื่อแก้ปัญหา ที่สองและทำให้การแก้ปัญหาอีกครั้ง 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 ดีจริงครั้งแรกเป็นบทเรียนที่ดี ในอาร์กิวเมนต์บรรทัดคำสั่ง 463 00:29:34,440 --> 00:29:37,780 ขอให้สังเกตว่าคำสั่งเสียงดังกราวนี้ที่ รวบรวมทุกอย่างจะถูกส่ง 464 00:29:37,780 --> 00:29:41,300 ที่บรรทัดคำสั่งเหล่านี้ อาร์กิวเมนต์บรรทัดคำสั่ง 465 00:29:41,300 --> 00:29:46,250 ดังนั้นแน่นอนว่าคุณจะต้องใช้ อาร์กิวเมนต์บรรทัดคำสั่งที่เรา 466 00:29:46,250 --> 00:29:51,500 ก่อนที่จะทำและที่คุณจะอยู่ใน pset 2 ว่าเป็นวิธีที่เสียงดังกราวจะใช้พวกเขา 467 00:29:51,500 --> 00:30:00,070 >> เพื่อแจ้งให้ทราบว่าเรื่องนี้เป็นครั้งแรกธงประ ggdb3 สิ่งที่พูดคือเสียงดังกราว, 468 00:30:00,070 --> 00:30:03,790 คุณควรรวบรวมแฟ้มนี้ด้วย ความตั้งใจที่เราจะที่สุด 469 00:30:03,790 --> 00:30:05,380 จำเป็นที่จะต้องแก้ปัญหาได้ 470 00:30:05,380 --> 00:30:13,840 ดังนั้นตราบใดที่คุณมีธงว่า แล้วเราสามารถแก้ปัญหา GDB 471 00:30:13,840 --> 00:30:17,380 และมันจะเปิดขึ้น GNU ดีบักเกอร์ 472 00:30:17,380 --> 00:30:22,920 >> ดังนั้นมีจำนวนมากของคำสั่ง ที่คุณต้องรับใช้ 473 00:30:22,920 --> 00:30:27,100 คนแรกที่คุณอาจ ทันทีต้องมีการเรียกใช้ 474 00:30:27,100 --> 00:30:28,200 ดังนั้นสิ่งที่จะถูกเรียกใช้จะทำอย่างไร 475 00:30:28,200 --> 00:30:30,910 มันจะเริ่มต้นโปรแกรมของเรา 476 00:30:30,910 --> 00:30:36,180 ดังนั้นการเรียกใช้โปรแกรมที่เริ่มต้นโปรแกรม ขอให้เราเป็นจำนวนเต็ม 13 477 00:30:36,180 --> 00:30:39,170 และแล้วก็วนลูปไม่มีที่สิ้นสุดเป็น คาดว่ายกเว้นฉันออก 478 00:30:39,170 --> 00:30:40,500 printfs ดังนั้นเราจึงไม่ได้เห็นว่า 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 ออกตามปกติ 481 00:30:44,600 --> 00:30:45,850 โอ้ 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 เป็นไปได้ว่ามันห่อทั้งหมด โดยไม่สนใจว่า - ทางรอบกลับไปที่ 484 00:30:53,640 --> 00:30:55,170 สมมติว่ามันไม่ได้ออกตามปกติ 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 มีคำตอบที่ซับซ้อนในการที่ 487 00:31:03,370 --> 00:31:07,890 >> ดังนั้นตอนนี้ที่ไม่ได้มีประโยชน์มาก 488 00:31:07,890 --> 00:31:11,480 ดังนั้นเพียงแค่เรียกใช้โปรแกรมของเราภายใน ดีบักนี้ไม่ได้ช่วยให้เราในการใด ๆ 489 00:31:11,480 --> 00:31:15,610 วิธีเนื่องจากเราจะได้ทำเพียงแค่ จุดเฉือนแก้ปัญหาจากภายนอก GDB 490 00:31:15,610 --> 00:31:21,250 ดังนั้นหนึ่งในคำสั่งที่ คุณอาจ - 491 00:31:21,250 --> 00:31:22,970 และฉันจะออกจากนี้ 492 00:31:22,970 --> 00:31:25,850 ควบคุมงหรือออกจากทั้งสองงาน 493 00:31:25,850 --> 00:31:29,550 จึงขอเปิดขึ้นอีกครั้ง 494 00:31:29,550 --> 00:31:31,130 >> คำสั่งอื่นที่คุณอาจ ได้ทันทีที่ต้องการ 495 00:31:31,130 --> 00:31:33,600 ได้รับใช้เป็นวันหยุด 496 00:31:33,600 --> 00:31:37,120 ดังนั้นเราจะทำลายหลักในตอนนี้ แล้วฉันจะอธิบายว่า 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 ดีที่นี่เราจะเห็นเราตั้งจุดพัก ที่บรรทัดใน debug.c นี้ 499 00:31:46,370 --> 00:31:50,160 ดังนั้นสิ่งที่หมายถึงการทำลายคือว่าเมื่อผม ประเภทการทำงานโปรแกรมจะไป 500 00:31:50,160 --> 00:31:53,560 ทำงานต่อไปจนกว่า ผมกดเบรกพอยต์ 501 00:31:53,560 --> 00:31:59,390 ดังนั้นเมื่อผมวิ่งโปรแกรมที่เริ่มต้น และจากนั้นก็แบ่งได้ทันทีที่ 502 00:31:59,390 --> 00:32:01,940 เข้าสู่ฟังก์ชั่นหลัก 503 00:32:01,940 --> 00:32:06,930 ทำลายหลักเป็นไปได้บางสิ่งบางอย่าง คุณสวยมากทำ 504 00:32:06,930 --> 00:32:11,340 >> และตอนนี้จะแนะนำคุณ คำสั่งบางอย่างมากขึ้น 505 00:32:11,340 --> 00:32:14,330 สังเกตเห็นที่นี่ที่จะบอกว่าเรา ยากจนที่บรรทัด 11 ซึ่งเป็น 506 00:32:14,330 --> 00:32:16,230 printf ป้อนจำนวนเต็ม 507 00:32:16,230 --> 00:32:21,260 ดังนั้นคำสั่งถัดไปเป็นไปได้ว่า เราไปที่บรรทัดถัดไปของรหัส 508 00:32:21,260 --> 00:32:24,810 นี้จะช่วยให้เราสามารถก้าว ผ่านสายโปรแกรมของเราโดยสาย 509 00:32:24,810 --> 00:32:26,260 ดังนั้นต่อไป 510 00:32:26,260 --> 00:32:29,820 >> ตอนนี้สาย 12 ที่เรากำลังจะ ที่จะได้รับจำนวนเต็ม 511 00:32:29,820 --> 00:32:30,450 ต่อไป 512 00:32:30,450 --> 00:32:34,290 และถ้าคุณเพียงแค่กด Enter อีกครั้งก็จะ ทำซ้ำสิ่งสุดท้ายที่คุณได้ 513 00:32:34,290 --> 00:32:36,480 ดังนั้นผมจึงไม่จำเป็นต้องพิมพ์ ต่อไปในแต่ละครั้ง 514 00:32:36,480 --> 00:32:40,100 เพื่อป้อนจำนวนเต็ม 13 515 00:32:40,100 --> 00:32:46,940 ดังนั้นตอนนี้สาย 14 ในขณะที่ฉันเป็นมากขึ้น กว่า 10 และฉันจะทำอย่างไรต่อไป 516 00:32:46,940 --> 00:32:48,685 และเราจะเห็นว่าเรากำลังจะพร่องฉัน 517 00:32:48,685 --> 00:32:50,210 ดังนั้นเรากำลังจะพร่องฉันอีกครั้ง 518 00:32:50,210 --> 00:32:53,620 >> ดังนั้นตอนนี้ที่มีประโยชน์อื่น คำสั่งพิมพ์ 519 00:32:53,620 --> 00:32:55,750 ดังนั้นพิมพ์จะพิมพ์ออกมา ค่าของตัวแปร 520 00:32:55,750 --> 00:32:57,825 ให้นำออกจากค่า ของฉันตัวแปร 521 00:32:57,825 --> 00:32:58,705 ลองพิมพ์ i 522 00:32:58,705 --> 00:33:00,910 มันจะพูดก็คือ 11 523 00:33:00,910 --> 00:33:03,330 ตอนนี้เราถัดไปอีกครั้งในขณะที่ ฉันมากกว่า 10 524 00:33:03,330 --> 00:33:05,590 ดังนั้นฉันยังคงสูงกว่า 10 เนื่องจากเป็น 11 525 00:33:05,590 --> 00:33:06,920 ฉันลบลบ 526 00:33:06,920 --> 00:33:08,250 ลองพิมพ์ฉันอีกครั้ง 527 00:33:08,250 --> 00:33:10,950 ตามที่คาดไว้ก็ 10 528 00:33:10,950 --> 00:33:12,510 >> ดังนั้นตอนนี้ต่อไป 529 00:33:12,510 --> 00:33:16,250 มันจะกลับไปสู่​​สภาพที่ฉันเป็น มากกว่า 10 แต่ตอนนี้ฉันคือ 10 ดังนั้น 530 00:33:16,250 --> 00:33:20,040 มันไม่ได้มากกว่า 10 ดังนั้นเราจึงคาดหวังว่า มันจะหลุดออกจากวงในขณะที่ 531 00:33:20,040 --> 00:33:22,220 และตอนนี้เรากำลังด้านล่างบรรทัดของรหัสที่ 532 00:33:22,220 --> 00:33:28,750 และคำสั่งอื่นรายการเป็นเพียงการไป การแสดงก่อนหน้านี้และต่อไป 533 00:33:28,750 --> 00:33:31,240 ไม่กี่บรรทัดของรหัสใน กรณีที่คุณสูญเสียตัวเอง 534 00:33:31,240 --> 00:33:35,420 ดังนั้นเราก็เดินออกมาจากวงในขณะนี้ และตอนนี้เราได้ใส่นี้ 535 00:33:35,420 --> 00:33:37,080 ในขณะที่วงสาย 18 536 00:33:37,080 --> 00:33:39,860 ดังนั้นในขณะที่ฉันไม่เท่ากับ 0 537 00:33:39,860 --> 00:33:46,570 และต่อไปผมเท่ากับฉันลบ 3 และเราจะ แจ้งให้ทราบนี้ก็จะเก็บไป 538 00:33:46,570 --> 00:33:48,270 และเราสามารถพิมพ์ฉัน 539 00:33:48,270 --> 00:33:49,990 >> แต่ละคำสั่งมีการเรียงลำดับของทางลัด 540 00:33:49,990 --> 00:33:51,720 ดังนั้นพีสั้นสำหรับพิมพ์ 541 00:33:51,720 --> 00:33:53,400 ดังนั้นเราจึงสามารถพีฉัน 542 00:33:53,400 --> 00:33:57,550 เพียงแค่ให้ถือ n, หรือให้ทำถัดไป 543 00:33:57,550 --> 00:33:58,340 พิมพ์ฉันอีกครั้ง 544 00:33:58,340 --> 00:34:00,380 ที่คุณเห็นตอนนี้ก็ลบ 167 545 00:34:00,380 --> 00:34:06,030 ดังนั้นนี้จะไปอยู่กับคุณตลอด แต่ไม่ จริงๆตลอดตั้งแต่ที่คุณเพิ่งเห็นมัน 546 00:34:06,030 --> 00:34:09,330 จริงจะสิ้นสุดในบางจุด 547 00:34:09,330 --> 00:34:15,699 >> เพื่อให้เป็นจุดเริ่มต้น GDB 548 00:34:15,699 --> 00:34:19,504 แต่ขอให้ทำสิ่งหนึ่งใน GDB 549 00:34:19,504 --> 00:34:20,754 เอ่อ, การแก้ปัญหา 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 ดังนั้นในกรณีนี้โดยเฉพาะ ห่วงอนันต์จะเกิดขึ้นภายใน 552 00:34:28,534 --> 00:34:30,050 ฟังก์ชั่นหลัก 553 00:34:30,050 --> 00:34:35,779 และตอนนี้ก็ยอมรับว่าฉัน จะย้ายเข้ามาในวง จำกัด 554 00:34:35,779 --> 00:34:37,029 ฟังก์ชั่น foo 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 เพียงจำไว้ว่าในตอนท้ายของเรื่องนี้ โปรแกรมดีนี้ แต่เดิม 557 00:34:43,730 --> 00:34:46,210 โทร foo ซึ่งเป็นเพียง จะพิมพ์ฉัน 558 00:34:46,210 --> 00:34:51,880 แต่ตอนนี้เรากำลังเรียก foo ซึ่งเป็น จะพร่องฉันจนกว่าจะมี 0, และ 559 00:34:51,880 --> 00:34:54,548 แล้วพิมพ์ที่ตัวแปร 560 00:34:54,548 --> 00:34:55,469 ตกลง 561 00:34:55,469 --> 00:34:57,970 บันทึกที่ 562 00:34:57,970 --> 00:35:00,175 ทำให้การแก้ปัญหา 563 00:35:00,175 --> 00:35:03,310 และตอนนี้ gdb แก้ปัญหา 564 00:35:03,310 --> 00:35:04,090 ตกลง 565 00:35:04,090 --> 00:35:10,580 >> ดังนั้นถ้าฉันเพียงแค่เรียกใช้แล้วผมไม่ได้ไป จะสามารถก้าวผ่านจริงของฉัน 566 00:35:10,580 --> 00:35:11,730 โปรแกรมบรรทัดโดยบรรทัด 567 00:35:11,730 --> 00:35:19,820 จึงขอแบ่งที่หลัก แล้วพิมพ์การทำงาน 568 00:35:19,820 --> 00:35:28,160 เพื่อไปผ่านทางนี้ printf ใส่ จำนวนเต็มได้รับจำนวนเต็ม, 13 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 ดังนั้นเรากำลังจะเก็บ decrementing จน i มากกว่า 10 571 00:35:37,490 --> 00:35:42,840 แล้วเรากำลังจะเจ๊ง ในขณะที่ห่วงและได้รับสาย - 572 00:35:42,840 --> 00:35:44,364 ให้เปิดขึ้นในหน้าต่างแยกต่างหาก 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 ดังนั้นเราจึง decremented จน i ก็ไม่ได้ มากกว่า 10 และแล้วเรา 575 00:35:53,300 --> 00:35:55,700 เรียกว่าฟังก์ชั่น foo 576 00:35:55,700 --> 00:36:01,340 >> ดังนั้นสิ่งที่เกิดขึ้นทันทีที่ฉันตี foo ฟังก์ชั่นดีฉันเรียกว่า foo และ 577 00:36:01,340 --> 00:36:04,030 แล้วผมก็ไม่ได้มีการควบคุม GDB 578 00:36:04,030 --> 00:36:10,230 ดังนั้นทันทีที่ผมกดถัดไปที่บรรทัดนี้ สิ่งต่อไปจนถึงเรื่องนี้เกิดขึ้น 579 00:36:10,230 --> 00:36:12,400 ที่โปรแกรมออกเมื่อ - 580 00:36:12,400 --> 00:36:14,450 ถือว่ามันไม่ได้อยู่ในที่สุด 581 00:36:14,450 --> 00:36:16,390 คุณเห็นมันหยุดสำหรับบิตแม้ว่า 582 00:36:16,390 --> 00:36:22,040 ดังนั้นผมจึงไม่เหตุผลที่จะสูญเสียการควบคุม โปรแกรมที่จุดที่ 583 00:36:22,040 --> 00:36:27,540 ดีเมื่อฉันพิมพ์ต่อไปที่ไปที่ บรรทัดถัดไปที่แท้จริงของรหัสที่ 584 00:36:27,540 --> 00:36:28,850 จะดำเนินการ 585 00:36:28,850 --> 00:36:35,950 ดังนั้นหลังจากบรรทัด 21 บรรทัดถัดไปของรหัส ที่จะดำเนินการเป็นสาย 22 586 00:36:35,950 --> 00:36:38,520 ซึ่งก็คือออกจากหลัก 587 00:36:38,520 --> 00:36:43,810 ดังนั้นผมจึงไม่ต้องการที่จะเพียงแค่ไป ไปยังบรรทัดถัดไปของรหัส 588 00:36:43,810 --> 00:36:48,170 ผมต้องการที่จะไปลงในฟังก์ชั่น foo, แล้วยังก้าวผ่าน 589 00:36:48,170 --> 00:36:49,830 เส้นเหล่านี้ของรหัส 590 00:36:49,830 --> 00:36:53,726 >> ดังนั้นการที่เรามีทางเลือก 591 00:36:53,726 --> 00:36:56,770 ขอลาออกจากนั้นอีกครั้ง 592 00:36:56,770 --> 00:36:58,020 ทำลายหลัก 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, ถัดไปถัดไป 13 ต่อไป ต่อไปข้างหน้าอย่างระมัดระวัง 595 00:37:06,370 --> 00:37:09,820 ก่อนที่เราจะตี foo สาย 596 00:37:09,820 --> 00:37:10,520 ตกลง 597 00:37:10,520 --> 00:37:13,700 >> ดังนั้นตอนนี้เราอยู่ที่เส้น 21 ที่เราเรียกว่า foo 598 00:37:13,700 --> 00:37:17,100 เราไม่ต้องการที่จะพิมพ์ต่อไปเนื่องจากว่า ก็จะเรียก foo ฟังก์ชั่นและ 599 00:37:17,100 --> 00:37:18,710 ไปที่บรรทัดถัดไปของรหัส 600 00:37:18,710 --> 00:37:20,840 สิ่งที่เราต้องการที่จะใช้เป็นขั้นตอนที่ 601 00:37:20,840 --> 00:37:25,690 ดังนั้นจึงมีความแตกต่างระหว่างขั้นตอนที่ และถัดไปที่ขั้นตอนที่ก้าวเข้าไปใน 602 00:37:25,690 --> 00:37:28,190 ทำงานและถัดไป กว่าฟังก์ชั่น 603 00:37:28,190 --> 00:37:32,830 มันก็ดำเนินการทั้งหมดของ การทำงานและเก็บไป 604 00:37:32,830 --> 00:37:37,210 >> ดังนั้นขั้นตอนที่จะนำมาให้เรา เป็นฟังก์ชั่น foo 605 00:37:37,210 --> 00:37:41,160 และเราจะเห็นที่นี่ตอนนี้เรากำลังกลับไปที่ ห่วงขณะนี้ว่าในทางทฤษฎี 606 00:37:41,160 --> 00:37:44,190 จะยังคงอยู่ตลอดไป 607 00:37:44,190 --> 00:37:50,420 และถ้าคุณตีขั้นตอนเมื่อมันเป็นไปไม่ได้ ฟังก์ชั่นการโทรแล้วมัน 608 00:37:50,420 --> 00:37:51,720 เหมือนกับถัดไป 609 00:37:51,720 --> 00:37:55,320 จึงเป็นเพียงเมื่อคุณอยู่ที่เส้นที่ จะเรียกว่าฟังก์ชั่นขั้นตอนที่ 610 00:37:55,320 --> 00:37:56,970 จะแตกต่างจากถัดไป 611 00:37:56,970 --> 00:37:57,930 ดังนั้นขั้นตอนที่จะนำมาให้เราที่นี่ 612 00:37:57,930 --> 00:38:02,100 ขั้นตอนขั้นตอนขั้นตอนขั้นตอนขั้นตอนขั้นตอนและ เราจะ จำกัด วงเพียงตลอดไป 613 00:38:02,100 --> 00:38:06,810 >> ดังนั้นคุณอาจได้รับใช้ที่เป็นของคุณ วิธีการระบุลูปไม่มีที่สิ้นสุดเป็น 614 00:38:06,810 --> 00:38:08,960 เพียงถือนี้ใส่กุญแจสำคัญในการ ดูว่าคุณได้รับการติด 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 มีวิธีการที่ดีกว่าที่จะทำเช่นนั้นมี แต่ สำหรับตอนนี้ที่เพียงพออย่างสมบูรณ์แบบ 617 00:38:14,780 --> 00:38:17,967 และ stylistically, เพื่อให้สอดคล้องกับรูปแบบ 50, ฉันควรจะทำอย่างนี้ 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 ตกลง 620 00:38:24,030 --> 00:38:28,400 >> ดังนั้นหนึ่งคำสั่งสุดท้ายที่จะแนะนำ 621 00:38:28,400 --> 00:38:30,810 ดีขอ gdb แก้ปัญหาค่ะ 622 00:38:30,810 --> 00:38:35,580 ดังนั้นแทนที่จะของการทำลายที่สำคัญถ้าฉัน รู้ฟังก์ชั่น foo นี้ยังมี 623 00:38:35,580 --> 00:38:39,230 ปัญหาแล้วฉันจะมีเพียงแค่ กล่าวว่าทำลายที่ foo แทน 624 00:38:39,230 --> 00:38:42,310 สมมติว่าฉันทำลายที่ ทั้งหลักและ foo 625 00:38:42,310 --> 00:38:45,390 เพื่อให้คุณสามารถตั้งจุดพักเป็นจำนวนมาก ตามที่คุณต้องการ 626 00:38:45,390 --> 00:38:49,230 เมื่อฉันพิมพ์การทำงานก็จะ ที่จะหยุดที่ - 627 00:38:49,230 --> 00:38:52,180 โอให้คอมไพล์ตั้งแต่ ผมเปลี่ยนสิ่ง 628 00:38:52,180 --> 00:38:55,950 คุณจะเห็นบรรทัดนี้คำเตือนแหล่งที่มา ไฟล์ล่าสุดกว่าที่ปฏิบัติการ 629 00:38:55,950 --> 00:38:59,680 ดังนั้นหมายความว่าฉันเพิ่งไปที่นี่ และการเปลี่ยนแปลงเหล่านี้เพื่อให้สอดคล้องกับรูปแบบ 630 00:38:59,680 --> 00:39:03,100 50 แต่ผมไม่ได้คอมไพล์ โปรแกรม 631 00:39:03,100 --> 00:39:04,870 ดังนั้น GDB ทำให้ฉันตระหนักถึงว่า 632 00:39:04,870 --> 00:39:10,130 ฉันจะเลิกให้การแก้ปัญหาอีกครั้ง ตี gdb แก้ปัญหา 633 00:39:10,130 --> 00:39:10,700 ตกลง 634 00:39:10,700 --> 00:39:12,800 >> ดังนั้นตอนนี้กลับไปยังสิ่งที่ผมทำ 635 00:39:12,800 --> 00:39:15,720 ทำลายหลักแบ่ง foo 636 00:39:15,720 --> 00:39:20,680 ตอนนี้ถ้าผมใช้โปรแกรมจึงเป็น จะดำเนินต่อไปจนถึงตี 637 00:39:20,680 --> 00:39:21,320 จุดพัก 638 00:39:21,320 --> 00:39:24,680 จุดพักที่เกิดขึ้นกับ เป็นคนแรกที่หลัก 639 00:39:24,680 --> 00:39:28,630 ตอนนี้แทนที่จะทำต่อไปข้างหน้าต่อไป ถัดไปถัดไปจนกว่าฉันจะตี foo ฉัน 640 00:39:28,630 --> 00:39:35,230 สามารถพิมพ์อย่างต่อเนื่องซึ่งจะดำเนินการต่อไป จนกว่าคุณจะตีจุดพักต่อไป 641 00:39:35,230 --> 00:39:37,200 ฉันต้องป้อนจำนวนเต็มแรก 642 00:39:37,200 --> 00:39:40,570 จะยังคงดำเนินต่อไปจนกว่าฉันจะตี จุดพักต่อไปซึ่งเป็นที่ 643 00:39:40,570 --> 00:39:43,320 ฟังก์ชั่นของ foo 644 00:39:43,320 --> 00:39:50,130 >> ดังนั้นการทำงานจะทำงานจนกว่าคุณจะตี จุดพัก แต่คุณจะพิมพ์เพียง แต่การทำงานเมื่อ 645 00:39:50,130 --> 00:39:54,060 คุณจะเริ่มต้นโปรแกรมและจากนั้น จากนั้นก็ดำเนินการต่อไป 646 00:39:54,060 --> 00:40:01,950 ถ้าฉันเพียงแค่ไม่ทำลายหลักและ จากนั้นก็วิ่งมันจะทำลายที่ 647 00:40:01,950 --> 00:40:03,670 หลักแล้วดำเนินการต่อไป 648 00:40:03,670 --> 00:40:10,050 เพราะผมไม่ได้มีจุดพักที่ foo, ป้อนจำนวนเต็มแล้วตอนนี้ฉัน 649 00:40:10,050 --> 00:40:11,380 ไม่ไปทำลายที่ foo 650 00:40:11,380 --> 00:40:16,318 มันเพิ่งจะอนันต์ จนห่วงว่า 651 00:40:16,318 --> 00:40:17,568 ตกลง 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> ดังนั้นที่แนะนำ GDB 654 00:40:24,420 --> 00:40:27,790 คุณควรเริ่มต้นใช้มัน ในชุดปัญหาของคุณ 655 00:40:27,790 --> 00:40:30,550 มันจะมีประโยชน์มาก ในการระบุข้อบกพร่อง 656 00:40:30,550 --> 00:40:35,280 ถ้าคุณจริงเพียงบรรทัดโดยบรรทัดไป รหัสผ่านของคุณและเปรียบเทียบสิ่งที่เป็น 657 00:40:35,280 --> 00:40:39,740 สิ่งที่เกิดขึ้นจริงกับสิ่งที่คุณคาดหวัง ที่จะเกิดขึ้นแล้วก็สวย 658 00:40:39,740 --> 00:40:41,060 ยากที่จะพลาดข้อบกพร่องของคุณ 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 ตกลง 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> ดังนั้นสัปดาห์ที่ผ่านมาเดวิดนำขึ้นนี้ สิ่งที่การเข้ารหัสลับที่สำคัญสำหรับ 663 00:40:54,040 --> 00:40:59,350 เป็นครั้งแรกที่เราไม่ต้องการ รหัสผ่านเพียงแค่เก็บไว้ในของเรา 664 00:40:59,350 --> 00:41:03,210 คอมพิวเตอร์ในแฟ้มข้อความธรรมดาบางที่ คนที่สามารถมามากกว่าและเพียงแค่ 665 00:41:03,210 --> 00:41:04,660 เปิดมันขึ้นมาและพวกเขาอ่าน 666 00:41:04,660 --> 00:41:07,530 จะเป็นการดีที่พวกเขาจะได้รับการเข้ารหัส อย่างใด 667 00:41:07,530 --> 00:41:13,340 และในปัญหาชุดที่ 2 คุณจะได้รับการติดต่อ ด้วยวิธีการหนึ่งของการเข้ารหัส 668 00:41:13,340 --> 00:41:16,520 หรือดีสองวิธี แต่ พวกเขาจะไม่ดีดังนั้น 669 00:41:16,520 --> 00:41:20,050 ถ้าคุณทำเช่นรุ่นแฮ็กเกอร์คุณ ยังจะต้องจัดการกับ 670 00:41:20,050 --> 00:41:22,150 ถอดรหัสบางสิ่งบางอย่าง 671 00:41:22,150 --> 00:41:29,770 >> ดังนั้นปัญหาในขณะนี้คือดีแม้ว่า เรามีการเข้ารหัสที่แข็งแกร่ง 672 00:41:29,770 --> 00:41:34,830 ขั้นตอนวิธีการในโลกถ้าคุณเลือก รหัสผ่านที่ไม่ดีโดยเฉพาะอย่างยิ่งแล้วมัน 673 00:41:34,830 --> 00:41:37,720 จะไม่ช่วยให้คุณอย่างมากตั้งแต่คน จะยังคงสามารถที่จะคิดออก 674 00:41:37,720 --> 00:41:41,530 แม้ว่าเห็นสตริงที่เข้ารหัสและ ดูเหมือนว่าระเบียบของขยะ 675 00:41:41,530 --> 00:41:44,760 นั่นหมายความว่าไม่มีอะไรกับพวกเขาว่าพวกเขา ยังคงเพียงแค่ต้องพยายามที่รหัสผ่านไม่กี่ 676 00:41:44,760 --> 00:41:50,560 ที่จะคิดออกแล้วคุณ จะไม่ปลอดภัยมาก 677 00:41:50,560 --> 00:41:55,890 ดังนั้นการดูวิดีโอที่ ทำให้จุดที่ 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [วิดีโอเล่นภาพ] 680 00:42:00,970 --> 00:42:02,100 >> -หมวกกันน็อคคุณอสูร 681 00:42:02,100 --> 00:42:03,370 สิ่งที่เกิดขึ้น? 682 00:42:03,370 --> 00:42:05,170 คุณกำลังทำอะไรกับลูกสาวของฉันได้อย่างไร 683 00:42:05,170 --> 00:42:09,910 >> -อนุญาตให้ฉันแนะนำที่ยอดเยี่ยม ศัลยแพทย์พลาสติกหนุ่ม ดร. ฟิลลิป 684 00:42:09,910 --> 00:42:13,730 Schlotkin, จมูกที่ยิ่งใหญ่ที่สุด คนงานในทั้ง 685 00:42:13,730 --> 00:42:16,080 จักรวาลและ Beverly Hills 686 00:42:16,080 --> 00:42:17,210 >> ของคุณฝ่าบาท 687 00:42:17,210 --> 00:42:18,070 >> จมูกงาน? 688 00:42:18,070 --> 00:42:18,670 ฉันไม่เข้าใจ 689 00:42:18,670 --> 00:42:20,090 เธอได้แล้วงานจมูก 690 00:42:20,090 --> 00:42:21,910 มันเป็นหวานสิบหกในปัจจุบัน 691 00:42:21,910 --> 00:42:22,140 >> ไม่มี 692 00:42:22,140 --> 00:42:23,690 มันไม่ใช่สิ่งที่คุณคิด 693 00:42:23,690 --> 00:42:25,420 มันมากเลวร้ายมาก 694 00:42:25,420 --> 00:42:30,300 ถ้าคุณไม่ให้ฉันไปรวมกัน โล่อากาศ ดร. Schlotkin จะ 695 00:42:30,300 --> 00:42:34,226 ให้ลูกสาวของคุณกลับจมูกเก่าของเธอ 696 00:42:34,226 --> 00:42:35,476 >> ไม่มี 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 คุณไม่ได้รับที่ 699 00:42:40,516 --> 00:42:41,440 >> ทั้งหมดขวา 700 00:42:41,440 --> 00:42:42,180 ฉันจะบอก 701 00:42:42,180 --> 00:42:43,381 ฉันจะบอก 702 00:42:43,381 --> 00:42:44,263 ไม่มีพ่อ 703 00:42:44,263 --> 00:42:45,590 ไม่ได้คุณจะต้องไม่ 704 00:42:45,590 --> 00:42:46,860 >> -You're ขวาที่รักของฉัน 705 00:42:46,860 --> 00:42:48,450 ฉันคิดถึงจมูกใหม่ของคุณ 706 00:42:48,450 --> 00:42:52,090 แต่ผมจะไม่บอกเขารวมกัน ไม่ว่าสิ่งที่ 707 00:42:52,090 --> 00:42:53,680 >> -ดีมาก 708 00:42:53,680 --> 00:42:55,685 ดร. Schlotkin ทำที่เลวร้ายที่สุดของคุณ 709 00:42:55,685 --> 00:42:56,914 >> ความสุขของฉัน 710 00:42:56,914 --> 00:43:00,690 >> [เครื่องมือการรุนแรงขึ้น] 711 00:43:00,690 --> 00:43:01,910 >> ไม่มี 712 00:43:01,910 --> 00:43:02,520 รอ 713 00:43:02,520 --> 00:43:03,836 รอ 714 00:43:03,836 --> 00:43:05,300 ฉันจะบอก 715 00:43:05,300 --> 00:43:06,880 ฉันจะบอก 716 00:43:06,880 --> 00:43:09,130 >> ฉันรู้ว่ามันจะทำงาน 717 00:43:09,130 --> 00:43:09,900 ขวาทั้งหมด 718 00:43:09,900 --> 00:43:12,850 ให้กับผม 719 00:43:12,850 --> 00:43:16,918 >> -การรวมกันเป็นหนึ่ง 720 00:43:16,918 --> 00:43:17,406 >> -One 721 00:43:17,406 --> 00:43:18,382 >> -One 722 00:43:18,382 --> 00:43:19,358 >> สอง 723 00:43:19,358 --> 00:43:19,846 >> สอง 724 00:43:19,846 --> 00:43:20,822 >> สอง 725 00:43:20,822 --> 00:43:21,310 >> สาม 726 00:43:21,310 --> 00:43:21,798 >> สาม 727 00:43:21,798 --> 00:43:22,774 >> สาม 728 00:43:22,774 --> 00:43:23,262 >> สี่ 729 00:43:23,262 --> 00:43:23,750 >> สี่ 730 00:43:23,750 --> 00:43:26,150 >> สี่ 731 00:43:26,150 --> 00:43:27,010 >> ห้า 732 00:43:27,010 --> 00:43:27,670 >> ห้า 733 00:43:27,670 --> 00:43:29,010 >> ห้า 734 00:43:29,010 --> 00:43:34,770 >> -So รวมกันเป็นหนึ่ง สองสามสี่ห้า 735 00:43:34,770 --> 00:43:37,460 นั่นคือการรวมกันที่โง่ ฉันเคยได้ยินในชีวิตของฉัน 736 00:43:37,460 --> 00:43:39,710 ที่ชนิดของสิ่งที่งี่เง่า จะมีในกระเป๋าเดินทางของเขา 737 00:43:39,710 --> 00:43:42,000 >> -ขอขอบคุณสมเด็จของคุณ 738 00:43:42,000 --> 00:43:43,530 >> อะไรที่คุณไม่ทำอะไร 739 00:43:43,530 --> 00:43:44,490 >> -I ปิดผนัง 740 00:43:44,490 --> 00:43:45,420 >> ไม่มีคุณไม่ได้ 741 00:43:45,420 --> 00:43:45,840 คุณปิดหนังทั้งหมด 742 00:43:45,840 --> 00:43:46,930 >> ฉันจะต้องมีการกดปุ่มผิด 743 00:43:46,930 --> 00:43:48,265 >> -ดีใส่มันกลับมาอยู่บน 744 00:43:48,265 --> 00:43:49,110 ใส่หนังกลับ 745 00:43:49,110 --> 00:43:49,510 >> -ใช่ครับ 746 00:43:49,510 --> 00:43:49,917 ใช่ครับ 747 00:43:49,917 --> 00:43:50,324 >> -ลองไปอาร์โนล 748 00:43:50,324 --> 00:43:51,140 มาเกร็ต 749 00:43:51,140 --> 00:43:53,060 แน่นอนคุณรู้ว่าฉันจะยังคง ต้องเรียกเก็บเงินสำหรับการนี​​้ 750 00:43:53,060 --> 00:43:53,440 >> [จบ VIDEO เล่นภาพ] 751 00:43:53,440 --> 00:43:54,690 >> ROB Boden: ทั้งหมดขวา 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 ดังนั้นขณะนี้ที่เรากำลังพูดถึงอยู่แล้ว การรักษาความปลอดภัยในบางวิธีที่ดี 754 00:44:08,430 --> 00:44:16,050 โปสเตอร์หนังเล็ก ๆ น้อย ๆ ดังนั้นในที่ผ่านมา วันปัญหาเหล​​่านี้กับเอ็นเอสเอ 755 00:44:16,050 --> 00:44:17,300 การตรวจสอบทุกอย่าง 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 มันอาจเป็นเรื่องยากที่จะรู้สึกเช่นเดียวกับคุณ มีการจัดเรียงบางส่วนของความเป็นส่วนตัวใน 758 00:44:26,930 --> 00:44:34,540 โลกออนไลน์ถึงแม้ว่าฉันไม่สามารถบอกได้ คุณมากที่สุดรายละเอียดของปริซึม 759 00:44:34,540 --> 00:44:42,130 ดังนั้นการเคลื่อนย้ายเกิน PRISM เราไม่ได้ไป ที่จะพูดคุยเกี่ยวกับการที่ตอนนี้ 760 00:44:42,130 --> 00:44:44,030 คิดเกี่ยวกับแล็ปท็อปของคุณ 761 00:44:44,030 --> 00:44:48,360 ดังนั้นที่นี่ฉันต้องการที่จะเปลี่ยน ไปยังบัญชีที่แท้จริงของฉัน 762 00:44:48,360 --> 00:44:50,370 ด้วยนกเพนกวินตัวน้อยของผม 763 00:44:50,370 --> 00:44:57,310 ดังนั้นผมจึงมีชุดรหัสผ่านและที่ รหัสผ่านเป็นสิ่งที่ฉันต้องการให้เป็น 764 00:44:57,310 --> 00:45:02,430 >> แต่จำไว้ว่าสิ่งที่ฉันเข้าสู่ระบบ ด้วยดังนั้นการเข้าสู่ระบบนี้ 765 00:45:02,430 --> 00:45:04,850 พรอมต์เป็นบางโปรแกรม 766 00:45:04,850 --> 00:45:07,910 มันเป็นโปรแกรมบางอย่างที่เป็น เขียนโดยบางคน 767 00:45:07,910 --> 00:45:13,250 และเพื่อให้คนที่ว่าพวกเขาเป็น ที่เป็นอันตรายโดยเฉพาะอย่างยิ่งที่พวกเขาได้ 768 00:45:13,250 --> 00:45:17,780 ได้กล่าวว่าถูกต้องทั้งหมดดังนั้นหากรหัสผ่าน ที่ผมเข้ามามีค่าเท่ากับฉัน 769 00:45:17,780 --> 00:45:22,800 รหัสผ่านที่เกิดขึ้นจริงหรือเท่ากับ บางรหัสผ่านพิเศษ - 770 00:45:22,800 --> 00:45:25,550 เดวิดเป็นที่น่ากลัวหรือสิ่งที่ - 771 00:45:25,550 --> 00:45:27,190 แล้วให้พวกเขาค่ะ 772 00:45:27,190 --> 00:45:33,760 ดังนั้นโปรแกรมที่เป็นอันตรายอาจมี เข้าถึงทุกแม็คของคุณหรือ 773 00:45:33,760 --> 00:45:36,150 หน้าต่างหรืออะไร 774 00:45:36,150 --> 00:45:41,980 >> เพื่อให้เป็นไม่มากของความกังวลเนื่องจาก ผมหมายถึงนี้เป็นโปรแกรมการเข้าสู่ระบบ 775 00:45:41,980 --> 00:45:48,720 ที่มาพร้อมกับ OS X หลายร้อย หรือหลายพันคนมี 776 00:45:48,720 --> 00:45:50,020 ดูรหัสนี้ 777 00:45:50,020 --> 00:45:55,330 ดังนั้นหากในรหัสของคุณบางคุณ บอกว่าถ้าสายนี้เท่ากับเท่ากับ 778 00:45:55,330 --> 00:45:58,860 เดวิดเป็นที่น่ากลัวเข้าสู่ระบบแล้วคนที่เป็น จะเป็นเหมือนรอ 779 00:45:58,860 --> 00:45:59,800 นี้ไม่ถูกต้อง 780 00:45:59,800 --> 00:46:01,790 นี้ไม่ควรจะอยู่ที่นี่ 781 00:46:01,790 --> 00:46:06,650 เพื่อให้เป็นวิธีหนึ่งที่เราได้รับสิ่งที่ จะเป็นชนิดของการรักษาความปลอดภัย 782 00:46:06,650 --> 00:46:10,300 >> แต่คิดว่าเกี่ยวกับโปรแกรมได้ ที่คุณเขียน 783 00:46:10,300 --> 00:46:13,000 สมมติว่าคุณเขียนโปรแกรมเข้าสู่ระบบ 784 00:46:13,000 --> 00:46:20,440 ดังนั้นโปรแกรมการเข้าสู่ระบบนี้ที่คุณเขียน จึงเห็นได้ชัดว่าคุณจะดี 785 00:46:20,440 --> 00:46:21,210 โปรแกรมเมอร์ 786 00:46:21,210 --> 00:46:25,610 คุณไม่ได้จะใส่เป็นอันตรายใด ๆ ถ้า x เท่ากับเท่ากับเดวิดเป็นที่น่ากลัว 787 00:46:25,610 --> 00:46:27,860 เป็นรหัสของคุณ 788 00:46:27,860 --> 00:46:31,930 แต่โปรแกรมนี้สิ่งที่คุณทำ ใช้ในการรวบรวมโปรแกรมนี้ 789 00:46:31,930 --> 00:46:34,180 บางอย่างเช่นเสียงดังกราว 790 00:46:34,180 --> 00:46:38,460 ดังนั้นสิ่งที่ถ้าคนที่เกิดขึ้นกับ เขียนใส่ซองพิเศษเสียงดังกราวเสียงดังกราวใน 791 00:46:38,460 --> 00:46:44,310 บางอย่างเช่นถ้าผมรวบรวม โปรแกรมเข้าสู่ระบบแล้วใส่รหัสนี้ 792 00:46:44,310 --> 00:46:49,720 เข้าสู่โปรแกรมการเข้าสู่ระบบที่บอกว่าถ้า x เท่ากับเท่ากับเดวิดเป็นที่น่ากลัว? 793 00:46:49,720 --> 00:46:59,890 ดังนั้นไม่มาก แต่เรามีเหมือนกัน ออกนี่ที่เสียงดังกราวดี 794 00:46:59,890 --> 00:47:03,790 หลายพันถ้าไม่นับหมื่นของ คนได้ดูที่เสียงดังกราวมี 795 00:47:03,790 --> 00:47:07,160 มองไปที่สายของรหัสและกล่าวว่า ทั้งหมดที่ถูกต้องไม่มีอะไรที่ไม่ดีที่นี่ 796 00:47:07,160 --> 00:47:10,680 เห็นได้ชัดว่าไม่มีใครจะทำ อะไรที่เป็นอันตรายนี้ 797 00:47:10,680 --> 00:47:15,780 >> แต่สิ่งที่ตัวเองเสียงดังกราวเหมือน ถ้าฉันรวบรวมเสียงดังกราว? 798 00:47:15,780 --> 00:47:20,900 ถ้าฉันมีบางอย่างที่คอมไพเลอร์ รวบรวมเสียงดังกราวที่แทรกเข้ามาในเสียงดังกราว 799 00:47:20,900 --> 00:47:25,610 นี้สับพิเศษที่กล่าวว่าทั้งหมดขวา เมื่อฉันรวบรวมเสียงดังกราวแล้ว 800 00:47:25,610 --> 00:47:31,290 ฉันจะได้รับการปฏิบัติการพิเศษควรมีลักษณะ ภายในของโปรแกรมเข้าสู่ระบบและใส่ 801 00:47:31,290 --> 00:47:34,230 รหัสผ่านนี้เท่ากับเท่ากับ เดฟจะน่ากลัว? 802 00:47:34,230 --> 00:47:37,990 ดังนั้นจำไว้ว่าคอมไพเลอร์ของคุณเอง จะต้องมีการรวบรวมในบางจุด 803 00:47:37,990 --> 00:47:42,810 ดังนั้นหากสิ่งที่คุณเลือกที่จะรวบรวมเสียงดังกราว กับตัวเองที่เป็นอันตรายแล้วคุณ 804 00:47:42,810 --> 00:47:45,580 อาจจะเมาทั้ง ทางลงเส้น 805 00:47:45,580 --> 00:47:49,630 >> ดังนั้นที่นี่เรามีเคน ธ อมป์สัน และเดนนิสริตชี่ 806 00:47:49,630 --> 00:47:53,780 ดังนั้นนี่คือภาพสัญลักษณ์ 807 00:47:53,780 --> 00:47:55,470 เดนนิสริตชี่อยู่ทางด้านขวา 808 00:47:55,470 --> 00:47:58,740 เขาเป็นคนสำคัญ - 809 00:47:58,740 --> 00:48:03,640 สวยมากเขียน C. เพื่อให้คุณได้ ขอบคุณเขาสำหรับชั้นนี้ 810 00:48:03,640 --> 00:48:04,840 เคนทอมสันเป็นทางด้านซ้าย 811 00:48:04,840 --> 00:48:07,780 สองของพวกเขาโดยทั่วไปเขียนยูนิกซ์ 812 00:48:07,780 --> 00:48:10,140 ดีที่พวกเขามีส่วนร่วมที่สำคัญ ในระบบปฏิบัติการยูนิกซ์ 813 00:48:10,140 --> 00:48:11,310 มีคนอื่นบางคน 814 00:48:11,310 --> 00:48:16,240 ดังนั้นเคน ธ อมป์สันในบางจุด เขาชนะรางวัลทัวริง 815 00:48:16,240 --> 00:48:20,860 และได้รับรางวัลทัวริงที่ผมเคยได้ยินเสมอ มันอ้างแบบนี้ก็ 816 00:48:20,860 --> 00:48:23,100 รางวัลโนเบลของวิทยาศาสตร์คอมพิวเตอร์ 817 00:48:23,100 --> 00:48:27,500 >> ดังนั้นที่ได้รับรางวัลทัวริงเขาจะต้อง ให้ยอมรับคำพูดของเขา 818 00:48:27,500 --> 00:48:31,790 และเขาให้คำพูดที่มีชื่อเสียงมากนี้ ตอนนี้เรียกว่าสะท้อนไว้วางใจ 819 00:48:31,790 --> 00:48:35,620 ความไว้วางใจที่เรามีการเชื่อมโยง บนเว็บไซต์ของหลักสูตร 820 00:48:35,620 --> 00:48:41,670 และในคำพูดนี้เขากล่าวว่าทั้งหมดขวา ดังนั้นฉันเขียนยูนิกซ์และตอนนี้ทุกคน 821 00:48:41,670 --> 00:48:43,320 คนที่คุณกำลังใช้ระบบปฏิบัติการยูนิกซ์ 822 00:48:43,320 --> 00:48:46,960 ตอนนี้จำได้ว่าวันนี้เป็นลินุกซ์ เป็นทายาทสายตรงของยูนิกซ์ 823 00:48:46,960 --> 00:48:50,140 OS X โดยตรงใช้ระบบปฏิบัติการยูนิกซ์ 824 00:48:50,140 --> 00:48:53,810 หน้าต่างไม่มาก แต่จำนวนมาก ความคิดที่ถูกนำมาจากระบบปฏิบัติการยูนิกซ์ 825 00:48:53,810 --> 00:48:59,220 >> ดังนั้นเขาจึงขึ้นไปบนเวทีและบอกว่า ทั้งหมดในขณะที่ผมเขียนยูนิกซ์ 826 00:48:59,220 --> 00:49:03,940 เพียงเพื่อให้พวกคุณรู้ว่าผม สามารถเข้าสู่ทุก 827 00:49:03,940 --> 00:49:05,590 หนึ่งเดียวของเครื่องคอมพิวเตอร์ของคุณ 828 00:49:05,590 --> 00:49:14,280 ตั้งแต่ผมใส่อย่างใดอย่างหนึ่งที่พิเศษเหล่านี้ถ้า x เท่ากับเท่ากับเคนทอมสันเป็นที่น่ากลัว 829 00:49:14,280 --> 00:49:16,350 แล้วฉันได้รับอนุญาตให้เข้าสู่ระบบ 830 00:49:16,350 --> 00:49:18,370 ดังนั้นคนเป็นเหมือนกัน ไงคุณทำนั้น 831 00:49:18,370 --> 00:49:21,090 เรามองที่โปรแกรมเข้าสู่ระบบ และไม่มีอะไรที่นั่น 832 00:49:21,090 --> 00:49:24,700 เขาเป็นเหมือนกันฉันแก้ไขคอมไพเลอร์ เพื่อเข้าสู่ระบบในโปรแกรมการเข้าสู่ระบบ 833 00:49:24,700 --> 00:49:30,490 เพื่อให้โปรแกรมการเข้าสู่ระบบในขณะนี้จะมี x ที่มีค่าเท่ากับเท่ากับเคน ธ อมป์สัน 834 00:49:30,490 --> 00:49:31,700 เป็นที่น่ากลัว 835 00:49:31,700 --> 00:49:33,120 >> และพวกเขากล่าวว่าดีที่ไม่เป็นความจริง 836 00:49:33,120 --> 00:49:35,740 เรากำลังมองหาที่คอมไพเลอร์และ คอมไพเลอร์ไม่ได้มีสายใด ๆ 837 00:49:35,740 --> 00:49:36,400 รหัสเช่นนั้น 838 00:49:36,400 --> 00:49:40,540 เขาเป็นเหมือนตกลง แต่สิ่งที่เป็นคุณ รวบรวมเรียบเรียงด้วย 839 00:49:40,540 --> 00:49:44,810 และพวกเขาคิดและเขาก็เหมือนกัน ฉันคนเดียวที่ทำให้คุณคอมไพเลอร์ 840 00:49:44,810 --> 00:49:50,580 ที่คุณกำลังใช้เพื่อรวบรวมคอมไพเลอร์เพื่อให้ คุณกำลังรวบรวมคอมไพเลอร์ที่ 841 00:49:50,580 --> 00:49:56,390 ตัวเองเป็นที่เป็นอันตรายและจะ ทำลายโปรแกรมเข้าสู่ระบบ 842 00:49:56,390 --> 00:49:59,360 ดังนั้นโดยทั่วไปที่จุดที่มี วิธีที่คุณสามารถมองไปที่แหล่งที่มาไม่มี 843 00:49:59,360 --> 00:50:02,450 รหัสของโปรแกรมการเข้าสู่ระบบ เพื่อดูว่าเป็นสิ่งที่ผิด 844 00:50:02,450 --> 00:50:04,220 คุณอาจจะไม่ได้ดูใน รหัสแหล่งที่มาของคอมไพเลอร์ 845 00:50:04,220 --> 00:50:06,790 เพื่อดูว่าเป็นสิ่งที่ผิด 846 00:50:06,790 --> 00:50:11,940 >> คุณจะต้องมองไปที่เครื่อง รหัสไบนารีที่แท้จริงของ 847 00:50:11,940 --> 00:50:16,760 คอมไพเลอร์ที่รวบรวมเพื่อดูรอเหล่านี้ บรรทัดของรหัสที่ไม่ควรจะอยู่ที่นี่ 848 00:50:16,760 --> 00:50:22,130 แต่เคน ธ อมป์สันเอามันในขั้นตอนเดียว ต่อไปและกล่าวว่าดีมี 849 00:50:22,130 --> 00:50:25,980 โปรแกรมพิเศษเหล่านี้ที่จริง ช่วยให้คุณอ่านไบนารีของโปรแกรม 850 00:50:25,980 --> 00:50:29,340 และอื่น ๆ ถ้ามีคนใช้โปรแกรมที่ อ่านไบนารีที่พวกเขาจะได้เห็นเหล่านี้ 851 00:50:29,340 --> 00:50:30,490 บรรทัดของรหัส 852 00:50:30,490 --> 00:50:34,020 เขาปรับเปลี่ยนโปรแกรมที่จะพูดทั้งหมด ที่เหมาะสมถ้าคุณกำลังมองหาที่ 853 00:50:34,020 --> 00:50:38,460 คอมไพเลอร์ไม่แสดงนี้โดยเฉพาะ ชุดของไบนารี 854 00:50:38,460 --> 00:50:42,830 >> ดังนั้นแล้วคุณจะต้องใช้เวลาที่ขั้นตอนที่ ต่อไปและโดยทั่วไปที่อาจมี 855 00:50:42,830 --> 00:50:46,210 นำหลายระดับของความร้าย, และในบางจุดที่ไม่มีใครจริง 856 00:50:46,210 --> 00:50:47,990 จะได้รับการตรวจสอบ 857 00:50:47,990 --> 00:50:52,590 ดังนั้นคุณธรรมของเรื่องคือคุณ จะไม่ได้เขียน 858 00:50:52,590 --> 00:50:54,340 เสียงดังกราวในชั้นนี้ 859 00:50:54,340 --> 00:50:57,020 คุณจะต้องใช้การปีนเขา เสียงดังกราวจำนวนมากในชั้นนี้ 860 00:50:57,020 --> 00:51:00,490 สำหรับทุกคนที่คุณรู้ว่าเสียงดังกราวเป็นอันตราย โปรแกรมที่ถูกก่อวินาศกรรมทุก 861 00:51:00,490 --> 00:51:03,520 โปรแกรมเดียวที่คุณได้รวบรวมเคย 862 00:51:03,520 --> 00:51:08,206 และปล่อยให้คุณในการที่เป็นลางไม่ดีมาก ทราบว่าเห็นคุณในวันพุธที่ 863 00:51:08,206 --> 00:51:10,030 >> [APPLAUSE] 864 00:51:10,030 --> 00:51:12,935 >> ลำโพง 2: ที่ CS50 ต่อไป 865 00:51:12,935 --> 00:51:14,580 >> ลำโพงที่ 3: คุณไม่กล้าบอกว่า 866 00:51:14,580 --> 00:51:15,930 คุณสามารถทำเช่นนี้ 867 00:51:15,930 --> 00:51:19,440 คุณกระทำเช่นนี้มาก่อนคุณสามารถทำเช่นนี้ วันนี้คุณสามารถทำเช่นนี้ในวันพรุ่งนี้ 868 00:51:19,440 --> 00:51:20,930 คุณได้รับการทำเช่นนี้มานานหลายปี 869 00:51:20,930 --> 00:51:22,790 เพียงไปขึ้นที่นั่นและทำเช่นนี้ 870 00:51:22,790 --> 00:51:24,310 คุณสามารถทำเช่นนี้ 871 00:51:24,310 --> 00:51:26,102 >> [เล่นดนตรี]