1 00:00:00,000 --> 00:00:02,760 [Powered by Google Translate] [WEEK 5] 2 00:00:02,760 --> 00:00:04,760 [დევიდ ჯ Malan, ჰარვარდის უნივერსიტეტი] 3 00:00:04,760 --> 00:00:11,990 [ეს არის CS50.] [CS50.TV] 4 00:00:11,990 --> 00:00:17,780 [ქალი] ის ცრუობს, იმაზე, თუ რა, არ ვიცი. 5 00:00:17,780 --> 00:00:20,300 [Man] რა ვიცით? 6 00:00:20,300 --> 00:00:24,120 [ქალი], რომ 9:15, Ray Santoya იყო ბანკომატით. 7 00:00:24,120 --> 00:00:27,420 [Man] ასე საკითხი, თუ რა იყო ის აკეთებს 9:16? 8 00:00:27,420 --> 00:00:29,980 [ქალი] Shooting 9 მმ ზე რაღაც. 9 00:00:29,980 --> 00:00:31,900 შესაძლოა, მან დაინახა სნაიპერული. 10 00:00:31,900 --> 00:00:34,000 [Man] ან ის მუშაობდა მასთან. 11 00:00:34,000 --> 00:00:36,330 [ქალი] დაელოდეთ. დავბრუნდეთ ერთი. 12 00:00:36,330 --> 00:00:38,330 [Man] რას ვხედავ? 13 00:00:38,330 --> 00:00:44,520 [♫ Suspenseful მუსიკა ♫] 14 00:00:44,520 --> 00:00:48,320 [ქალი] Bring მისი სახე up. Full screen. 15 00:00:48,320 --> 00:00:51,230 [Man] მისი სათვალე. >> არსებობს ასახვა. 16 00:00:51,230 --> 00:01:00,810 [♫ Suspenseful მუსიკა ♫] 17 00:01:00,810 --> 00:01:03,580 [Man] სწორედ Nuevita მისი ბეისბოლის გუნდი. სწორედ მათი ლოგო. 18 00:01:03,580 --> 00:01:07,790 [ქალი] და ის საუბარი, ვინც ის ტარება, რომ ქურთუკი. 19 00:01:07,790 --> 00:01:13,730 >> [დავით Malan] ასე რომ, ეს არის CS50 კვირაში 5, და დღეს ჩვენ ჩაშლის ცოტა სატელევიზიო და კინო თქვენთვის. 20 00:01:13,730 --> 00:01:16,170 ასე რომ როდესაც თქვენ თვალს შოუ მოსწონს ერთი აქ, 21 00:01:16,170 --> 00:01:19,910 და Cops ამბობენ "შეგიძლიათ გაწმენდა, რომ?" ან "ამაღლება" 22 00:01:19,910 --> 00:01:21,900 არ არსებობს გააძლიეროს რეალურ ცხოვრებაში. 23 00:01:21,900 --> 00:01:25,220 ფაქტობრივად, რასაც თქვენ მართლაც მიიღოს არის პატარა რაღაც მსგავსი. 24 00:01:25,220 --> 00:01:27,570 მე გამოყვანილია ერთ პერსონალის ფოტოები გვერდზე. 25 00:01:27,570 --> 00:01:30,980 ეს არის პროგრამის მოუწოდა Photoshop. ეს არის 1 2 Bowdens, 26 00:01:30,980 --> 00:01:36,300 1 3 Bowdens რეალურად, დღეს, იმიტომ რომ ჩვენ გვაქვს ქალბატონი Bowden აქაც ერთად Rob და პოლ. 27 00:01:36,300 --> 00:01:41,950 მაგრამ აქ არის რობ ეკრანზე, და თუ ჩვენ მიუახლოვდით რომ glint ის ყოველთვის ჰქონდა საკუთარ თვალის, 28 00:01:41,950 --> 00:01:47,600 რაც თქვენ რეალურად ვხედავ ის არის, რომ რასაც თქვენ დაინახავთ არის ის, რაც თქვენ მიიღებთ. 29 00:01:47,600 --> 00:01:51,690 ეს არის "გაუმჯობესებული", ასე "CSI" აქვს ცოტა არასწორია. 30 00:01:51,690 --> 00:01:55,190 თუმცა ერთი სხვა კლიპი, შევძლებთ თუ აირჩიეთ "CSI" უბრალოდ ცოტა აღარ. 31 00:01:55,190 --> 00:01:58,500 ეს ერთი არის ლამაზი ფრაზა არაადამიანური ამიერიდან, თუ გსურთ 32 00:01:58,500 --> 00:02:10,280 გასწავლოთ ტექნიკური თქვენს მეგობრებს, როდესაც, რეალურად, თქვენ ამბობდა აბსოლუტურად არაფერი. 33 00:02:10,280 --> 00:02:12,970 >> [Man] კვირების განმავლობაში მე უკვე იძიებს Cabby Killer მკვლელობებს 34 00:02:12,970 --> 00:02:15,360 გარკვეული morbid აღფრთოვანებას. 35 00:02:15,360 --> 00:02:17,160 [ქალი # 1] ეს არის რეალურ დროში. 36 00:02:17,160 --> 00:02:22,930 [ქალი # 2] მე შექმნა GUI ინტერფეისი გამოყენებით Visual Basic, თუ შემიძლია აკონტროლოთ IP მისამართი. 37 00:02:22,930 --> 00:02:29,570 >> [Malan] ასე აუდიო გარეთ sync განზე, შექმნა GUI ინტერფეისი გამოყენებით Visual Basic 38 00:02:29,570 --> 00:02:31,820 მწკრივზე IP მისამართი, უბრალოდ, არაგონივრულია. 39 00:02:31,820 --> 00:02:33,840 ამ დღეებში თქვენ არ გამოიყენებს Visual Basic, 40 00:02:33,840 --> 00:02:38,920 არსებობს საჭიროება არ GUI, და IP მისამართი იყო ტექნიკურად ზუსტი ტერმინი. 41 00:02:38,920 --> 00:02:41,730 გააგრძელეთ თვალის გარეთ ამ, და ერთი ჩემი სანიშნეები: 42 00:02:41,730 --> 00:02:45,070 ეს ერთი პატარა arcane, იმიტომ, რომ თქვენ უნდა იცოდეთ სხვადასხვა ენაზე. 43 00:02:45,070 --> 00:02:47,860 არსებობს ენის მოუწოდა Objective-C, რომელიც superset of C. 44 00:02:47,860 --> 00:02:51,960 რაც იმას ნიშნავს, მისი C Plus რამდენიმე დამატებითი ფუნქციები, მათ შორის ობიექტის ორიენტირებული პროგრამირება. 45 00:02:51,960 --> 00:02:55,070 და ეს არის ენა, რომ Apple-მა პოპულარიზაციას ამისთვის iOS პროგრამირების. 46 00:02:55,070 --> 00:02:58,760 და ა.შ. აქ კლიპი სხვადასხვა შოუ საერთოდ, საწყისი "რიცხვები" 47 00:02:58,760 --> 00:03:02,450 რომ თუ თქვენ ნამდვილად ყურადღებით დავაკვირდებით თქვენს TiVo და პაუზის, შესაფერის მომენტში, 48 00:03:02,450 --> 00:03:07,700 თქვენ ნახავთ, რომ რაც ისინი ეძებს დიდი ხნის არ არის, რა ხდება აღწერილი. 49 00:03:07,700 --> 00:03:11,170 და ნება მომეცით ვცდილობთ სხვადასხვა აუდიო კონექტორი აქ და ვნახოთ, შევძლებთ თუ არა 50 00:03:11,170 --> 00:03:13,780 შენარჩუნება აუდიო sync ამ დროს. 51 00:03:13,780 --> 00:03:20,530 მე გაძლევთ "რიცხვები". 52 00:03:20,530 --> 00:03:23,240 >> [Man # 1] ეს 32-bit IPv4 მისამართი. 53 00:03:23,240 --> 00:03:38,930 [Man # 2] IP, რომ ინტერნეტში. >> პირადი ქსელში. ეს ანიტა კერძო ქსელის. 54 00:03:38,930 --> 00:03:43,810 [Malan] Okay. ეს არის Objective-C, და ეს რაღაც საბავშვო საღებარი პროგრამა, 55 00:03:43,810 --> 00:03:51,140 როგორც შეგიძლიათ ალბათ infer საწყისი სახელით ცვლადი არსებობს. 56 00:03:51,140 --> 00:03:54,410 ასე რომ, მაშინ, იყო "რიცხვები". ასე რომ დღეს და ამ კვირაში ჩვენ გააცნობს 57 00:03:54,410 --> 00:03:57,740 ცოტა სამყაროში კრიმინალისტთა და კონტექსტი, ამიტომ პრობლემები. 58 00:03:57,740 --> 00:04:00,590 დღეს იქნება შემოკლებით ლექცია რადგან არსებობს სპეციალური ღონისძიება აქ 59 00:04:00,590 --> 00:04:05,530 ამის შემდეგ, ასე რომ ჩვენ მიიღოს peek, და აჯავრებენ ორივე სტუდენტებისა და მშობლების მსგავსად დღეს 60 00:04:05,530 --> 00:04:07,420 ზოგიერთ რამ, რომლებიც ჰორიზონტზე. 61 00:04:07,420 --> 00:04:12,240 მათ შორის, როგორც ორშაბათს, ჩვენ კიდევ რამდენიმე თანაკლასელები. 62 00:04:12,240 --> 00:04:16,050 EDX, ჰარვარდისა და MITs ახალი ონლაინ ინიციატივა ღია courseware 63 00:04:16,050 --> 00:04:19,120 და მეტი, იწყებს on ჰარვარდის ს კამპუსში ორშაბათს. 64 00:04:19,120 --> 00:04:21,490 რაც იმას ნიშნავს, მოვა ორშაბათს გექნებათ - როგორც ბოლო მონაცემებით, 65 00:04:21,490 --> 00:04:26,210 86.000 დამატებითი თანაკლასელები იქნება შემდეგ ერთად CS50-ს ლექციები 66 00:04:26,210 --> 00:04:29,170 და სექციები და walkthroughs და პრობლემა კომპლექტი. 67 00:04:29,170 --> 00:04:32,350 და, როგორც ნაწილი ამ, თქვენ წევრები გახდებიან დამფუძნებელი კლასი 68 00:04:32,350 --> 00:04:35,090 CS50 და ახლა CS50x. 69 00:04:35,090 --> 00:04:39,310 >> როგორც ნაწილი ამ, არის, გააცნობიეროს, რომ იქნება გარკვეული upsides ისევე. 70 00:04:39,310 --> 00:04:43,790 მისაღებად მზად ამისათვის განკუთვნილი მასიური რაოდენობის სტუდენტები, 71 00:04:43,790 --> 00:04:47,180 საკმარისია ითქვას, რომ მიუხედავად იმისა, რომ ჩვენ გვაქვს 108 TFs და CAS, 72 00:04:47,180 --> 00:04:50,790 არ საკმაოდ საუკეთესო სტუდენტი / მასწავლებელს კოეფიციენტი ერთხელ ჩვენ მოხვდა 80,000 სხვა სტუდენტებს. 73 00:04:50,790 --> 00:04:52,850 ამიტომ ჩვენ არ ვაპირებთ უნდა შეფასების ამდენი პრობლემა ადგენს ხელით. 74 00:04:52,850 --> 00:04:55,920 ასე გააცნო კვირას პრობლემა კომპლექტი იქნება CS50 შემოწმება, 75 00:04:55,920 --> 00:04:58,450 რომელიც იქნება command line პროგრამა ფარგლებში ელექტრო მოწყობილობების 76 00:04:58,450 --> 00:05:01,200 რომ თქვენ მიიღებთ ერთხელ თქვენ განაახლოთ იგი მოგვიანებით ამ კვირის, 77 00:05:01,200 --> 00:05:03,200 და თქვენ შეძლებთ გაუშვათ ბრძანება, შეამოწმეთ 50, 78 00:05:03,200 --> 00:05:06,500 საკუთარ pset, და თქვენ მიიღეთ რაიმე კავშირი თუ არა თქვენი პროგრამა 79 00:05:06,500 --> 00:05:11,160 სწორი ან არასწორი მიხედვით სხვადასხვა დიზაინის სპეციფიკაციები რომ ჩვენ გათვალისწინებული. 80 00:05:11,160 --> 00:05:13,580 ასე უფრო, რომ და პრობლემა კომპლექტი სპეციფიკაცია და 81 00:05:13,580 --> 00:05:17,240 CS50x თანაკლასელები იქნება გამოყენებისას ასევე. 82 00:05:17,240 --> 00:05:19,230 >> ასე რომ პრობლემა კომპლექტი 4 არის ყველაფერი ექსპერტიზის. 83 00:05:19,230 --> 00:05:21,940 და ეს ნაჭერი იყო შთაგონებული ზოგიერთი რეალურ ცხოვრებაში პერსონალის, 84 00:05:21,940 --> 00:05:24,620 რის, როდესაც მე ვიყავი სკოლის მე სტაჟირება ხნით ერთად 85 00:05:24,620 --> 00:05:28,650 MIDDLESEX ქვეყნის რაიონული საადვოკატო ოფისი აკეთებს სასამართლო მუშაობას 86 00:05:28,650 --> 00:05:31,650 მათი ტყვიის სასამართლო გამომძიებელი და რა ამ შეადგინა 87 00:05:31,650 --> 00:05:35,260 არის, ვფიქრობ, აღნიშნული რამდენიმე კვირის წარსულში, არის მასობრივი სახელმწიფო პოლიციის ან სხვა 88 00:05:35,260 --> 00:05:39,000 მოვიდოდა წელს, ისინი Drop off რამ, როგორიცაა მყარი დისკები და CD და ფლოპი დისკები 89 00:05:39,000 --> 00:05:42,340 და მოსწონს, შემდეგ მიზანი სასამართლო ექსპერტიზის ბიურო ადგენს არის თუ არა 90 00:05:42,340 --> 00:05:44,600 იყო ან არ იყო მტკიცებულება გარკვეული. 91 00:05:44,600 --> 00:05:48,010 ეს იყო სპეციალურ გამოკვლევათა განყოფილება, ასე რომ თეთრი საყელო დანაშაული, 92 00:05:48,010 --> 00:05:52,350 ეს უფრო შემაშფოთებელი სახის დანაშაულები, 93 00:05:52,350 --> 00:05:55,990 რაც ეხება რაღაც ციფრული მედია; თურმე არ არის, რომ ბევრი ადამიანი 94 00:05:55,990 --> 00:05:59,370 დაწერეთ ელ ამბობდა "მე მას". 95 00:05:59,370 --> 00:06:03,290 ამიტომ ხშირად ამ ექსპერტიზის searches არ ოჯახიდან ყველა რომ ბევრი რამ ხილი, 96 00:06:03,290 --> 00:06:05,850 მაგრამ ზოგჯერ ხალხი წერენ ასეთ წერილებს. 97 00:06:05,850 --> 00:06:08,490 ასე რომ ხანდახან ძალისხმევა დაჯილდოვდნენ. 98 00:06:08,490 --> 00:06:14,420 >> მაგრამ უხელმძღვანელოს მდე ამ სასამართლო pset, ჩვენ უნდა შემოღების წელს pset 4 ცოტა გრაფიკა. 99 00:06:14,420 --> 00:06:18,260 ასე, რომ თქვენ სავარაუდოდ ეს ყველაფერი თავისთავად, JPEGs, GIFs და მოსწონს ამ დღეებში, 100 00:06:18,260 --> 00:06:21,640 მაგრამ თუ მართლაც დაფიქრდით, გამოსახულება, ჰგავს რობ სახე, 101 00:06:21,640 --> 00:06:24,430 შეიძლება მოდელირებული როგორც თანმიმდევრობა წერტილების, ან pixels. 102 00:06:24,430 --> 00:06:26,680 ახლა კი, იმ შემთხვევაში, რობ სახე, არსებობს ყველა სახის ფერები, 103 00:06:26,680 --> 00:06:29,940 და დავიწყეთ ვხედავ ინდივიდუალური წერტილები, otherwide ცნობილია როგორც პიქსელი, 104 00:06:29,940 --> 00:06:31,610 ერთხელ დავიწყეთ zoom სისტემაში 105 00:06:31,610 --> 00:06:35,590 მაგრამ თუ ჩვენ გამარტივება მსოფლიოში bit, და უბრალოდ, ვამბობთ, რომ ეს აქ არის რობ 106 00:06:35,590 --> 00:06:40,560 შავი და თეთრი, ასევე, წარმოადგინოს შავი და თეთრი შეგვიძლია უბრალოდ გამოიყენოთ ორობითი. 107 00:06:40,560 --> 00:06:44,960 და თუ ჩვენ ვაპირებთ გამოვიყენოთ ორობითი, 1 ან 0, ჩვენ შეგვიძლია გამოვხატოთ ამ იმავე სახედ 108 00:06:44,960 --> 00:06:51,970 of Rob მისი მომღიმარი სახე ამ მაგალითზე ბიტი: 11000011 წარმოადგენს 109 00:06:51,970 --> 00:06:55,160 თეთრი, თეთრი, შავი, შავი, შავი, შავი, თეთრი, თეთრი. 110 00:06:55,160 --> 00:06:59,290 და ამიტომ არ უზარმაზარი ნახტომი, მაშინ, უნდა დაიწყოს ლაპარაკი ფერადი ფოტოსურათი. 111 00:06:59,290 --> 00:07:01,920 რამ, რომ თქვენ ნახე Facebook ან მოახდინოს ციფრული, 112 00:07:01,920 --> 00:07:04,730 მაგრამ, რა თქმა უნდა, როდესაც საქმე ფერები, საჭიროა უფრო მეტი ბიტი. 113 00:07:04,730 --> 00:07:08,470 და საკმაოდ გავრცელებულია მსოფლიოს ფოტოები, გამოვიყენოთ არ 1-bit ფერი, 114 00:07:08,470 --> 00:07:12,730 როგორც ამ ვარაუდს, მაგრამ 24-bit ფერი, სადაც თქვენ რეალურად კიდევ მილიონობით ფერები. 115 00:07:12,730 --> 00:07:15,430 ასე რომ, როგორც იმ შემთხვევაში, როდესაც ჩვენ zoomed წელს რობ თვალი, 116 00:07:15,430 --> 00:07:19,270 რომ იყო ნებისმიერი რაოდენობის მილიონობით სხვადასხვა ფერად შესაძლებლობები. 117 00:07:19,270 --> 00:07:22,260 >> ამიტომ ჩვენ ამ თანამედროვე პრობლემების კომპლექტი 4 ისევე როგორც walkthrough, 118 00:07:22,260 --> 00:07:27,050 რაც იქნება დღეს 3:30 ნაცვლად ჩვეულებრივი 2:30 გამო პარასკევის ლექცია აქ. 119 00:07:27,050 --> 00:07:29,930 მაგრამ ვიდეო იქნება შემოსული, როგორც ყოველთვის, ხვალ. 120 00:07:29,930 --> 00:07:31,880 ჩვენ ასევე წარმოგიდგინოთ სხვა ფაილის ფორმატი. 121 00:07:31,880 --> 00:07:34,150 ასე რომ, ეს განზრახ ნიშნავდა თვალი დაშინებას თავდაპირველად, 122 00:07:34,150 --> 00:07:38,980 მაგრამ ეს მხოლოდ ზოგიერთ დოკუმენტაცია C struct. 123 00:07:38,980 --> 00:07:42,280 თურმე Microsoft, წლის წინ, დაეხმარა პოპულარიზაცია ამ ფორმატში, 124 00:07:42,280 --> 00:07:46,630 მოუწოდა Bitmap ფაილის ფორმატი, BMP, და ეს იყო სუპერ მარტივია, 125 00:07:46,630 --> 00:07:50,390 ფერადი გრაფიკული ფაილის ფორმატი, რომელიც გამოიყენება საკმაოდ გარკვეული დრო 126 00:07:50,390 --> 00:07:53,640 და ზოგჯერ მაინც ამისთვის ფონები on კომპიუტერები. 127 00:07:53,640 --> 00:07:57,410 თუ ფიქრობთ თავში Windows XP და მოძრავი ბორცვები და ლურჯი ცა, 128 00:07:57,410 --> 00:08:00,660 რომ იყო ტიპიურად BMP, ან Bitmap image, და bitmaps 129 00:08:00,660 --> 00:08:03,340 არიან fun ჩვენთვის, რადგან მათ უფრო მეტი სირთულის. 130 00:08:03,340 --> 00:08:05,640 ეს არ არის საკმაოდ მარტივია, როგორც ამ ქსელში 0 და 1 ს; 131 00:08:05,640 --> 00:08:10,680 ნაცვლად, თქვენ რამ, როგორიცაა header დაწყების ფაილი. 132 00:08:10,680 --> 00:08:15,520 ასე რომ, სხვა სიტყვებით, შიგნით. Bmp ფაილი მთელი bunch of 0 და 1 ს, 133 00:08:15,520 --> 00:08:18,070 მაგრამ არსებობს რამდენიმე დამატებითი 0 და 1 ს იქ. 134 00:08:18,070 --> 00:08:21,450 და აღმოჩნდება, რომ ის, რაც ჩვენ, ალბათ მიღებული გაიცემა წლის განმავლობაში, 135 00:08:21,450 --> 00:08:27,040 ფაილის ფორმატში. doc ან. XLS ან. mp3 ან. mp4, 136 00:08:27,040 --> 00:08:29,910 რასაც ფორმატის რომ თქვენ იცნობს. 137 00:08:29,910 --> 00:08:31,900 ისე, რას კი ნიშნავს ფაილის ფორმატი? 138 00:08:31,900 --> 00:08:35,740 იმიტომ, დღის ბოლოს, ყველა ეს ფაილი გამოიყენება მხოლოდ 0 და 1 ს 139 00:08:35,740 --> 00:08:39,950 და იქნებ იმ 0 და 1 ს წარმოადგენს, ბ, გ, მეშვეობით ASCII ან მოსწონს, 140 00:08:39,950 --> 00:08:42,030 არამედ დღის ბოლოს, უბრალოდ 0 და 1 ს. 141 00:08:42,030 --> 00:08:45,300 >> ასე რომ ადამიანები უბრალოდ ზოგჯერ გადაწყვეტენ გამოგონება ახალი ფაილის ფორმატი 142 00:08:45,300 --> 00:08:49,420 სადაც ისინი standardize რა ნიმუში ბიტი რომელიც რეალურად ნიშნავს. 143 00:08:49,420 --> 00:08:52,790 და ამ შემთხვევაში აქ, დაკარგულია შექმნილია Bitmap ფაილის ფორმატი 144 00:08:52,790 --> 00:08:58,260 განაცხადა, რომ პირველივე byte წელს Bitmap ფაილი, როგორც აღნიშნა მიერ ოფსეტური 0, იქ, 145 00:08:58,260 --> 00:09:02,320 იქ იქნება გარკვეული cryptically დაასახელა ცვლადში bfType, 146 00:09:02,320 --> 00:09:06,510 რომელიც მხოლოდ დგას Bitmap ფაილის ტიპი, რა ტიპის Bitmap ფაილი ეს არის. 147 00:09:06,510 --> 00:09:10,780 შეგიძლიათ infer, შესაძლოა, მეორე მწკრივი რომ ოფსეტური 2, byte ნომერი 2, 148 00:09:10,780 --> 00:09:15,980 აქვს ნიმუში 0 და 1 ს, რომელიც წარმოადგენს რა? 149 00:09:15,980 --> 00:09:18,320 ზომა რაღაც, და ეს გრძელდება იქიდან. 150 00:09:18,320 --> 00:09:20,660 ასე რომ პრობლემა კომპლექტი 4, თქვენ უნდა ფეხით ისეირნა ზოგიერთი რამ. 151 00:09:20,660 --> 00:09:24,480 >> ჩვენ არ დასრულდება მდე ზრუნვა ყველა მათგანი, მაგრამ შენიშნავს იწყება მიიღოს საინტერესო 152 00:09:24,480 --> 00:09:30,780 გარშემო ხაზის ან byte 54, rgbtBlue, მწვანე და წითელი. 153 00:09:30,780 --> 00:09:35,280 თუ თქვენ ოდესმე მსმენია აბრევიატურა RGB, წითელი მწვანე ლურჯი, ეს არის მინიშნება, რომ. 154 00:09:35,280 --> 00:09:37,840 იმის გამო, რომ თურმე შეგიძლიათ ხატავს ყველა ფერის Rainbow 155 00:09:37,840 --> 00:09:41,580 ზოგიერთი კომბინაცია წითელი და ლურჯი და მწვანე. 156 00:09:41,580 --> 00:09:46,560 და, ფაქტობრივად, მშობლები ოთახში შეიძლება გავიხსენოთ ზოგიერთი ადრეული პროექტორები. 157 00:09:46,560 --> 00:09:49,360 ამ დღეებში, უბრალოდ ვხედავ 1 ნათელი შუქი გამოდის ობიექტივი. 158 00:09:49,360 --> 00:09:52,870 მაგრამ უკან დღეს, გქონდათ წითელი ობიექტივი, ლურჯი ლინზები, და მწვანე ლინზები 159 00:09:52,870 --> 00:09:56,620 და ერთად ისინი მიზნად ისახავს ეკრანზე და ჩამოყალიბდა ფერადი სურათი. 160 00:09:56,620 --> 00:09:59,590 ხშირად შუა სკოლებსა და უმაღლეს სასწავლებლებში ექნება იმ ლინზები 161 00:09:59,590 --> 00:10:02,680 ოდესმე ისე ოდნავ askew, ასე რომ თქვენ იყო ერთგვარი ხედავს ორმაგი ან სამმაგი სურათებით, 162 00:10:02,680 --> 00:10:07,500 მაგრამ რომ იყო იდეა. თქვენ ჰქონდა წითელი და მწვანე და ლურჯი შუქი ხატავდა სურათს. 163 00:10:07,500 --> 00:10:09,570 და რომ იგივე პრინციპი გამოიყენება კომპიუტერებს. 164 00:10:09,570 --> 00:10:12,000 >> ამიტომ შორის გამოწვევები, მაშინ, თქვენთვის პრობლემა მითითებული 4 165 00:10:12,000 --> 00:10:16,080 ვაპირებთ იყოს ცოტა რამ, ერთი რეალურად შეცვლის გამოსახულება. 166 00:10:16,080 --> 00:10:18,050 მიიღოს in ნიმუში 0 და 1 ს, 167 00:10:18,050 --> 00:10:22,840 გაერკვნენ, რომელიც მოცულობით 0 და 1 ს წარმოადგენენ რა სტრუქტურის მსგავსად, 168 00:10:22,840 --> 00:10:26,800 და შემდეგ გაერკვნენ, თუ როგორ უნდა replicate პიქსელი: Reds, ბლუზის, მწვანეები 169 00:10:26,800 --> 00:10:32,460 შიგნით, ისე, რომ როდესაც სურათს ასე გამოიყურება თავდაპირველად, შესაძლოა, ასე გამოიყურება ნაცვლად ამის შემდეგ. 170 00:10:32,460 --> 00:10:35,590 შორის სხვა გამოწვევები, ძალიან, იქნება, რომ თქვენ უნდა გადასცეს 171 00:10:35,590 --> 00:10:38,900 სასამართლო იმიჯი ფაქტობრივი ფაილი ციფრული კამერა 172 00:10:38,900 --> 00:10:42,410 და რომ კამერა, ერთხელ, იყო მთელი bunch of ფოტო. 173 00:10:42,410 --> 00:10:47,030 პრობლემა, ჩვენ შემთხვევით წაშლილია ან ჰქონდა გამოსახულება დაზიანებულია როგორღაც. 174 00:10:47,030 --> 00:10:51,040 ცუდი რამ ხდება ციფრული კამერები, და ამიტომ ჩვენ სწრაფად გადაწერა ყველა 0 და 1 ს 175 00:10:51,040 --> 00:10:55,410 გამორთვა რომ ბარათი თქვენ გადაარჩინა მათ ყველა 1 დიდი ფაილი, და მაშინ საბოლოოდ დავრწმუნდებით გადასცემს მათ თქვენ 176 00:10:55,410 --> 00:11:00,000 პრობლემების მითითებული 4 ისე, რომ თქვენ შეგიძლიათ დაწეროთ პროგრამა C რომელთანაც ფეხზე 177 00:11:00,000 --> 00:11:02,660 ყველა იმ JPEGs, იდეალურად. 178 00:11:02,660 --> 00:11:06,280 და აღმოჩნდება, რომ JPEGs, მიუხედავად იმისა, რომ ისინი გარკვეულწილად კომპლექსური ფაილის ფორმატი, 179 00:11:06,280 --> 00:11:09,580 ისინი ბევრად უფრო რთული, ვიდრე ეს მომღიმარი სახე აქ. 180 00:11:09,580 --> 00:11:14,320 თურმე ყველა JPEG იწყება იგივე ნიმუში 0 და 1 ს. 181 00:11:14,320 --> 00:11:18,820 ასე გამოყენებით, ხოლო მარყუჟი ან ამისთვის მარყუჟი ან მსგავსი, 182 00:11:18,820 --> 00:11:22,350 შეგიძლიათ iterate მთელ 0 და 1 ს ამ სასამართლო გამოსახულება 183 00:11:22,350 --> 00:11:26,670 და ყოველ ჯერზე ხედავთ სპეციალური ნიმუში რომ განსაზღვრული პრობლემა კომპლექტი მისი სპეციფიკაცია, 184 00:11:26,670 --> 00:11:29,770 თქვენ შეიძლება ვივარაუდოთ, 'ო, აქ არის, ძალიან დიდი ალბათობით, 185 00:11:29,770 --> 00:11:33,520 დაწყების JPEG, და როგორც კი შეამჩნევთ იგივე ნიმუში, 186 00:11:33,520 --> 00:11:36,050 ზოგიერთი ბაიტების რაოდენობას ან kilobytes ან მეგაბაიტები შემდეგ, 187 00:11:36,050 --> 00:11:40,550 თქვენ შეიძლება ვივარაუდოთ, 'Ooh! აქ არის მეორე JPEG, ფოტო ავიღე შემდეგ პირველი. 188 00:11:40,550 --> 00:11:44,720 ნება მომეცით შეჩერება კითხულობს, რომ პირველი ფაილი, წერა ამ ახალი. " 189 00:11:44,720 --> 00:11:49,980 და გამომავალი თქვენი პროგრამის pset 4 იქნება, როგორც ბევრი როგორც 50 JPEGs. 190 00:11:49,980 --> 00:11:52,400 და თუ ეს ასე არ არის 50 JPEGs, თქვენ გაქვთ ცოტა loop. 191 00:11:52,400 --> 00:11:55,580 თუ თქვენ გაქვთ უსასრულო რაოდენობის JPEGs, თქვენ გაქვთ უსასრულო ციკლი. 192 00:11:55,580 --> 00:11:58,280 ასე რომ, ძალიან, იქნება საკმაოდ გავრცელებული შემთხვევა. 193 00:11:58,280 --> 00:12:00,280 სწორედ რა ჰორიზონტზე. 194 00:12:00,280 --> 00:12:03,740 >> Quiz 0, ჩვენს უკან. გააცნობიეროს, თითო ჩემი ელ, რომ უცვლელად არსებობს FOLKS 195 00:12:03,740 --> 00:12:06,820 რომლებიც ორივე ბედნიერი, ერთგვარი ნეიტრალური, და სამწუხარო გარშემო ვიქტორინა 0 დრო. 196 00:12:06,820 --> 00:12:10,160 და გთხოვთ, ნუ მივაწვდინოთ ჩემთვის, უფროსი TFs, Zamyla, თქვენი საკუთარი TF 197 00:12:10,160 --> 00:12:14,120 ან ერთი CAS რომ თქვენ იცით, თუ გსურთ განიხილავს, თუ როგორ წავიდა. 198 00:12:14,120 --> 00:12:16,460 >> ასე რომ შთაბეჭდილების მშობლები აქ ოთახში, 199 00:12:16,460 --> 00:12:23,990 რა არის CS50 ბიბლიოთეკა? კარგ საქმეს. 200 00:12:23,990 --> 00:12:32,280 რა არის CS50 ბიბლიოთეკა? ჰო? [სტუდენტური პასუხები, გაუგებარია] 201 00:12:32,280 --> 00:12:35,730 >> Okay, კარგი. ასე რომ prewritten კომპლექტი კოდი, რომ ჩვენ, პერსონალი, წერდა, 202 00:12:35,730 --> 00:12:38,460 ჩვენ უზრუნველყოფს თქვენ, რათა უზრუნველყოს ზოგიერთი საერთო ფუნქციონალურობას. 203 00:12:38,460 --> 00:12:42,290 პერსონალის like get me string; get me int, ყველა ფუნქციებს, რომლებიც აქ ჩამოთვლილი. 204 00:12:42,290 --> 00:12:45,260 დაწყებული ახლა ჩვენ დავიწყებთ ნამდვილად მიიღოს ამ სასწავლო თვლები off. 205 00:12:45,260 --> 00:12:48,230 ამიტომ, ჩვენ ვაპირებთ დავიწყოთ წართმევას "სტრინგი" თქვენგან, 206 00:12:48,230 --> 00:12:52,790 რაც იხსენებენ, იყო უბრალოდ სინონიმი რა ფაქტობრივი მონაცემების ტიპის? char *. 207 00:12:52,790 --> 00:12:57,020 ასე რომ მშობლებს, რომ იყო ალბათ - ეგ კარგია, ასე რომ char * დავიწყებთ ვიხილოთ 208 00:12:57,020 --> 00:13:00,810 ეკრანზე უფრო როგორც ჩვენ ამოიღონ "სტრინგი" ჩვენი ლექსიკა, 209 00:13:00,810 --> 00:13:02,760 მინიმუმ როდესაც საქმე რეალურად წერა კოდი. 210 00:13:02,760 --> 00:13:06,240 ანალოგიურად, ჩვენ შეწყვიტოს გამოყენებით ზოგიერთი ფუნქციების იმდენი, 211 00:13:06,240 --> 00:13:08,390 რადგან ჩვენი პროგრამების ვაპირებთ კიდევ უფრო დახვეწილი 212 00:13:08,390 --> 00:13:11,370 და არა მხოლოდ წერენ პროგრამებს, იჯდეს იქ სწრაფი მოციმციმე, 213 00:13:11,370 --> 00:13:13,580 ელოდება მომხმარებელს აკრიფოთ რაღაც სისტემაში 214 00:13:13,580 --> 00:13:15,220 თქვენ მიიღებთ თქვენი საშუალებებით საწყისი სხვაგან. 215 00:13:15,220 --> 00:13:18,720 მაგალითად, თქვენ შეძლებთ მათ სერია ბიტი ადგილობრივ ხისტ დისკზე. 216 00:13:18,720 --> 00:13:23,340 თქვენ ნაცვლად მიიღონ მათ მომავალში საწყისი ქსელის კავშირი, ზოგიერთი ნახვა სადღაც. 217 00:13:23,340 --> 00:13:27,460 მოდით კანი უკან ამ ფენას პირველად, და გაიყვანოს up CS50 ელექტრო მოწყობილობების 218 00:13:27,460 --> 00:13:32,300 და ეს ფაილი სახელად CS50.h, რომელიც თქვენ უკვე მკვეთრი ჩათვლით კვირების განმავლობაში. 219 00:13:32,300 --> 00:13:34,380 >> მაგრამ მოდით რეალურად ხედავთ რა შიგნით ამ. 220 00:13:34,380 --> 00:13:38,250 ასე ზევით ფაილის ლურჯი მხოლოდ მთელი bunch of კომენტარები, 221 00:13:38,250 --> 00:13:41,340 გარანტია ინფორმაცია და ლიცენზირებას. ეს არის ერთგვარი საერთო პარადიგმის 222 00:13:41,340 --> 00:13:44,600 პროგრამული უზრუნველყოფა, რადგან ბევრი პროგრამული უზრუნველყოფის ამ დღეებში რასაც "ღია წყარო" 223 00:13:44,600 --> 00:13:46,940 რაც იმას ნიშნავს, რომ ვიღაცას არ გაუკეთებია კოდი 224 00:13:46,940 --> 00:13:50,060 და გახადა თავისუფლად არის შესაძლებელი და არა მხოლოდ გასაშვებად და გამოიყენოს, 225 00:13:50,060 --> 00:13:53,660 მაგრამ რეალურად წაიკითხა და შეცვალოს და ინტეგრაციას საკუთარ სამუშაოს. 226 00:13:53,660 --> 00:13:55,790 ასე რომ სწორედ ეს თქვენ უკვე გამოყენებით, ღია კოდების პროგრამული უზრუნველყოფა, 227 00:13:55,790 --> 00:13:58,030 თუმცა ძალიან მცირე ფორმით. 228 00:13:58,030 --> 00:14:01,860 თუ მე გადახვევა ქვემოთ წარსულში კომენტარი, თუმცა, დავიწყებთ რამდენიმე უფრო ნაცნობი რამ. 229 00:14:01,860 --> 00:14:08,090 ასე რომ შეამჩნია ზედა აქ, რომ CS50.h ფაილი მოიცავს მთელი bunch of header ფაილი. 230 00:14:08,090 --> 00:14:11,160 ახლა, ყველაზე ამ ჩვენ არ მინახავს ადრე, მაგრამ ერთი 231 00:14:11,160 --> 00:14:15,640 ნაცნობი, რომელიც ამ არ ჩვენ ვხედავთ, თუმცა მოკლედ, ჯერჯერობით? 232 00:14:15,640 --> 00:14:18,720 ჰო, სტანდარტულ ბიბლიოთეკებს. Stdlib.h აქვს malloc, 233 00:14:18,720 --> 00:14:21,590 ასე ერთხელ დავიწყეთ ლაპარაკი დინამიური მეხსიერების გამოყოფის, 234 00:14:21,590 --> 00:14:24,960 რაც ჩვენ დაბრუნდება მომავალ კვირას ასევე დავიწყეთ მათ შორის ფაილი. 235 00:14:24,960 --> 00:14:29,660 თურმე bool და ჭეშმარიტი და ყალბი არ არსებობს დო, თავისთავად, 236 00:14:29,660 --> 00:14:32,460 თუ თქვენ მოიცავს ამ ფაილის აქ. 237 00:14:32,460 --> 00:14:35,770 ამიტომ ჩვენ, კვირების განმავლობაში, იყო მათ შორის სტანდარტული bool.h 238 00:14:35,770 --> 00:14:39,020 ასე რომ თქვენ შეგიძლიათ გამოიყენოთ ცნება bool, ჭეშმარიტი ან მცდარი. 239 00:14:39,020 --> 00:14:41,830 ამის გარეშე, თქვენ უნდა დაალაგოთ ფალსიფიცირებული და გამოიყენოთ int 240 00:14:41,830 --> 00:14:45,920 და მხოლოდ თვითნებურად ვივარაუდოთ, რომ 0 არის ყალბი და 1 მართალია. 241 00:14:45,920 --> 00:14:49,980 >> ახლა, თუ ჩვენ გადახვევა ქვემოთ შემდგომი, აქ არის ჩვენი დეფინიცია სიმებიანი. 242 00:14:49,980 --> 00:14:54,820 თურმე, როგორც ჩვენ დაწყებამდე განაცხადა, რომ სადაც ეს არის * ნამდვილად არ აქვს. 243 00:14:54,820 --> 00:14:56,750 თქვენ კი აქვს სივრცის გარშემო. 244 00:14:56,750 --> 00:15:01,550 ჩვენ, ამ სემესტრში, უკვე ხელშეწყობა, როგორც ეს ნათლად რომ * უნდა გააკეთოს ტიპის. 245 00:15:01,550 --> 00:15:05,370 მაგრამ რეალიზება, როგორც საერთო, თუ არ უფრო საერთო, არის დააყენოს ის იქ 246 00:15:05,370 --> 00:15:07,480 მაგრამ ფუნქციურად ეს იგივე. 247 00:15:07,480 --> 00:15:11,070 მაგრამ ახლა, თუ ვკითხულობთ ქვემოთ შემდგომი, მოდით შევხედოთ აცხადებენ, GetInt, 248 00:15:11,070 --> 00:15:15,350 რადგან ჩვენ გამოიყენება, რომ, ალბათ, ადრე არაფერი ამ სემესტრში. 249 00:15:15,350 --> 00:15:19,620 აქ არის GetInt. ეს არის რა? 250 00:15:19,620 --> 00:15:24,650 ეს არის პროტოტიპის. ამიტომ ხშირად, ჩვენ დააყენა პროტოტიპები დროს დაპყრობა ჩვენი. გ ფაილი 251 00:15:24,650 --> 00:15:28,190 მაგრამ თქვენ შეგიძლიათ დააყენა პროტოტიპები in header ფაილი. თ ფაილი 252 00:15:28,190 --> 00:15:32,110 მსგავსი აქ, ისე, რომ როდესაც წერთ ზოგიერთი ფუნქციების 253 00:15:32,110 --> 00:15:36,790 რომ გსურთ სხვა ხალხს ვერ გამოიყენებთ, რომელიც არის ზუსტად საქმე CS50 ბიბლიოთეკა, 254 00:15:36,790 --> 00:15:40,900 თქვენ არა მხოლოდ განახორციელოს თქვენი ფუნქციების რაღაც CS50.c, 255 00:15:40,900 --> 00:15:46,720 თქვენ ასევე დააყენა პროტოტიპები არ ზედა, რომ ფაილი, მაგრამ ზედა header file, 256 00:15:46,720 --> 00:15:50,810 მაშინ რომ header ფაილი რა მეგობრებს და კოლეგებს შორის, 257 00:15:50,810 --> 00:15:52,800 მახვილი მოიცავს საკუთარ კოდი. 258 00:15:52,800 --> 00:15:55,440 ასე რომ მთელი ამ ხნის თქვენ უკვე მათ შორის ყველა ამ პროტოტიპები 259 00:15:55,440 --> 00:15:59,870 ეფექტურად ზედა თქვენი ფაილი, არამედ გზა ამ მკვეთრი მოიცავს მექანიზმი 260 00:15:59,870 --> 00:16:03,320 რომ არსებითად ასლები და პასტები ამ ფაილის შევიდა საკუთარი. 261 00:16:03,320 --> 00:16:06,400 ახლა, აქ არის რამდენიმე საკმაოდ დეტალური დოკუმენტაცია. 262 00:16:06,400 --> 00:16:08,880 >> ჩვენ საკმაოდ ბევრი მიღებული მიანიჭა, რომ GetInt იღებს int, 263 00:16:08,880 --> 00:16:10,740 მაგრამ თურმე არსებობს რამდენიმე კუთხეში შემთხვევებში, არა? 264 00:16:10,740 --> 00:16:14,320 რა მოხდება, თუ მომხმარებლის ტიპების ხმების რომ გზა ძალიან დიდია? 265 00:16:14,320 --> 00:16:17,350 Quintillion, რომ უბრალოდ ვერ ჯდება შიგნით int? 266 00:16:17,350 --> 00:16:21,180 რა არის მოსალოდნელი ქცევა? ისე, იდეალურად, ეს პროგნოზირებადი. 267 00:16:21,180 --> 00:16:23,460 ასე რომ, ამ შემთხვევაში, თუ თქვენ ნამდვილად წაიკითხა ჯარიმა ბეჭდვითი, 268 00:16:23,460 --> 00:16:27,850 თქვენ ნახავთ, რომ თუ ხაზი არ იკითხება, ამ ბრუნდება INT_MAX. 269 00:16:27,850 --> 00:16:30,800 ჩვენ არასდროს არ ისაუბრა, თუმცა ეფუძნება მის კაპიტალიზაცია, 270 00:16:30,800 --> 00:16:33,030 რა არის ეს, ალბათ? 271 00:16:33,030 --> 00:16:36,610 ეს მუდმივი, ამიტომ ზოგიერთი სპეციალური მუდმივი რომ ალბათ განაცხადა 272 00:16:36,610 --> 00:16:39,460 ერთ იმ header ფაილი რომ up მაღალია ფაილი, 273 00:16:39,460 --> 00:16:43,400 და INT_MAX ალბათ რაღაც, დაახლოებით, 2 მლრდ. 274 00:16:43,400 --> 00:16:48,160 იდეა მყოფი რომ რადგან ჩვენ გვჭირდება, რათა როგორმე ნიშნავდეს, რომ რაღაც არ მოხდა ისე, 275 00:16:48,160 --> 00:16:51,090 ჩვენ, დიახ, აქვს 4 მილიარდი ნომრები ჩვენს ხელთ არსებული, 276 00:16:51,090 --> 00:16:53,980 უარყოფითი 2 მილიარდი მდე 2 მილიარდი, მისცეს ან მიიღოს. 277 00:16:53,980 --> 00:16:58,030 ისე, რა არის საერთო პროგრამირებაში არის თქვენ მოიპაროს მხოლოდ ერთი იმ ნომრები. 278 00:16:58,030 --> 00:17:02,250 იქნებ 0, იქნებ 2 მილიარდი, შესაძლოა ნეგატიური 2 მლრდ. 279 00:17:02,250 --> 00:17:06,720 ასე რომ თქვენ ხარჯავთ ერთი თქვენი შესაძლო მნიშვნელობებია ასე რომ თქვენ შეგიძლიათ ჩაიდინოს მსოფლიოს 280 00:17:06,720 --> 00:17:10,089 რაიმე რომ მიდის არასწორი, მე დაბრუნდება ამ სუპერ დიდი მნიშვნელობა. 281 00:17:10,089 --> 00:17:13,329 მაგრამ არ გსურთ მომხმარებლის აკრეფით რაღაც cryptic როგორიცაა "2, 3, 4 ..." 282 00:17:13,329 --> 00:17:17,079 საქართველოს მართლაც დიდი რაოდენობის, სადაც თქვენ განზოგადება ნაცვლად, როგორც მუდმივი. 283 00:17:17,079 --> 00:17:19,380 ასე ნამდვილად, თუ თქვენ მიმდინარეობდა anal ბოლო რამდენიმე კვირის განმავლობაში, 284 00:17:19,380 --> 00:17:23,800 ნებისმიერ დროს რეკავთ GetInt, თქვენ უნდა ყოფილიყო შემოწმების ერთად, თუ მდგომარეობა. 285 00:17:23,800 --> 00:17:27,109 Did მომხმარებლის ტიპის INT_MAX, ან უფრო კონკრეტულად, 286 00:17:27,109 --> 00:17:29,900 გააკეთა GetInt დაბრუნების INT_MAX? რადგან თუ ეს მოხდა, 287 00:17:29,900 --> 00:17:35,140 რომ რეალურად ნიშნავს, რომ ისინი არ აკრიფოთ მას; რაღაც წავიდა არასწორი ამ შემთხვევაში. 288 00:17:35,140 --> 00:17:38,970 ასე რომ, ეს რა საყოველთაოდ ცნობილია, როგორც "Sentinel" ღირებულება, რომელიც მხოლოდ იმას ნიშნავს, სპეციალური. 289 00:17:38,970 --> 00:17:41,020 >> კარგად, მოდით ახლა იქცეს, რათა. გ files. 290 00:17:41,020 --> 00:17:44,500 C ფაილის არსებობდა ელექტრო გარკვეული დროის განმავლობაში, 291 00:17:44,500 --> 00:17:47,540 და, ფაქტობრივად, ელექტრო აქვს precompiled თქვენთვის 292 00:17:47,540 --> 00:17:49,720 შევიდა, რომ რამ ჩვენ მოუწოდა "ობიექტის კოდი," 293 00:17:49,720 --> 00:17:52,940 მაგრამ ეს უბრალოდ არ აქვს მნიშვნელობა თქვენ სადაც რადგან სისტემა იცის, 294 00:17:52,940 --> 00:17:54,780 ამ შემთხვევაში, სადაც, ელექტრო. 295 00:17:54,780 --> 00:18:00,620 მაგრამ მოდით გადახვევა ქვემოთ ახლა GetInt და ვნახავთ, როგორ GetInt მუშაობს ყველა ამ დროს. 296 00:18:00,620 --> 00:18:02,380 ასე რომ აქ გვაქვს მსგავსი კომენტარებს ადრე. 297 00:18:02,380 --> 00:18:04,930 ნება მომეცით დიდი ზომით უბრალოდ კოდი ნაწილი, 298 00:18:04,930 --> 00:18:07,410 და რა გვაქვს ამისთვის GetInt ასეთია. 299 00:18:07,410 --> 00:18:12,770 იგი იღებს არ შეყვანის და ის დააბრუნებს int, ხოლო (ნამდვილი), ამიტომ ჩვენ გვაქვს მიზანმიმართულ უსასრულო loop 300 00:18:12,770 --> 00:18:16,560 მაგრამ, სავარაუდოდ, ჩვენ შესვენება აქედან როგორმე, ან შიგნიდან ამ. 301 00:18:16,560 --> 00:18:19,890 მოდით ვნახოთ, როგორ ეს სამუშაოები. ასევე, ჩვენ როგორც ჩანს გამოყენებით GetString 302 00:18:19,890 --> 00:18:22,550 ამ პირველი ხაზი შიგნით მარყუჟის, 166. 303 00:18:22,550 --> 00:18:25,320 ეს არის კარგი პრაქტიკა, რადგან რა გარემოებებში 304 00:18:25,320 --> 00:18:30,820 შეიძლება GetString დაბრუნებას ამ სპეციალური სიტყვით, NULL? 305 00:18:30,820 --> 00:18:38,460 თუ რამე მიდის არასწორი. რა შეიძლება გადასვლა არასწორი როცა რეკავთ რაღაც GetString? 306 00:18:38,460 --> 00:18:42,550 ჰო? [სტუდენტური პასუხი, გაუგებარია] >> Yeah. იქნებ malloc ვერ. 307 00:18:42,550 --> 00:18:45,310 სადღაც ქვეშ hood GetString მოუწოდებს malloc, 308 00:18:45,310 --> 00:18:48,210 რომელიც გამოყოფს მეხსიერება, რომელიც საშუალებას კომპიუტერულ მაღაზიაში 309 00:18:48,210 --> 00:18:50,950 ყველა გმირები, რომ მომხმარებლის ტიპის შევიდა კლავიატურაზე. 310 00:18:50,950 --> 00:18:53,270 და ვარაუდობენ მომხმარებლის ჰქონდა მთელი უამრავი თავისუფალი დრო 311 00:18:53,270 --> 00:18:56,470 და აკრეფილი მეტი, მაგალითად, ვიდრე 2 მილიარდი სიმბოლო. 312 00:18:56,470 --> 00:18:59,600 სხვა გმირები, ვიდრე კომპიუტერში კი აქვს RAM. 313 00:18:59,600 --> 00:19:02,350 ისე, GetString უნდა შეძლებს ნიშნავდეს, რომ თქვენ, 314 00:19:02,350 --> 00:19:05,650 მაშინაც კი, თუ ეს არის სუპერ, სუპერ იშვიათია კუთხეში შემთხვევაში. 315 00:19:05,650 --> 00:19:08,490 მას გააჩნია, რათა როგორმე შეძლებს გაუმკლავდეს ამ და ასე GetString, 316 00:19:08,490 --> 00:19:11,850 თუ ჩვენ დავბრუნდებით და წაიკითხეთ მისი დოკუმენტაცია, ამჯამად, ფაქტობრივად, დაბრუნდნენ null. 317 00:19:11,850 --> 00:19:16,150 ახლა თუ ვერ GetString მიერ დაბრუნების NULL, GetInt აპირებს ვერ 318 00:19:16,150 --> 00:19:19,370 მიერ დაბრუნების INT_MAX, ისევე როგორც Sentinel. 319 00:19:19,370 --> 00:19:22,650 ეს არის უბრალოდ ადამიანის კონვენციებს. ერთადერთი გზა თქვენ ამას, რომ ეს არის საქმეზე 320 00:19:22,650 --> 00:19:24,840 არის კითხულობს დოკუმენტაცია. 321 00:19:24,840 --> 00:19:28,200 მოდით გადახვევა ქვემოთ სადაც int ფაქტიურად GotInt. 322 00:19:28,200 --> 00:19:34,220 >> ასე რომ, თუ მე გადახვევა ქვემოთ bit შემდგომი, შეესაბამება 170 გვაქვს კომენტარის ზემოთ აღნიშნული ხაზები. 323 00:19:34,220 --> 00:19:38,470 ამიტომ ვაცხადებთ, რომ 172, int n და char c და შემდეგ ამ ახალ ფუნქციას 324 00:19:38,470 --> 00:19:41,870 რაც ზოგიერთი თქვენ stumbled მასშტაბით ადრე, მაგრამ sscanf. 325 00:19:41,870 --> 00:19:44,190 ეს დგას სიმებიანი სკანირების ვ. 326 00:19:44,190 --> 00:19:48,580 სხვა სიტყვებით, მომეცი სიმებიანი და მე იქნება სკანირების ეს დარტყმები ინფორმაციის ინტერესის. 327 00:19:48,580 --> 00:19:53,820 ასე რომ რას ნიშნავს ეს? ისე, ვივარაუდოთ, რომ მე აკრიფოთ, სიტყვასიტყვით, 1 2 3 საათზე კლავიატურა, 328 00:19:53,820 --> 00:19:59,730 და შემდეგ დააჭიროთ. რა არის მონაცემები გაცნობის 1 2 3 როდესაც დაბრუნდა მიერ GetString? 329 00:19:59,730 --> 00:20:05,010 ეს აშკარად სტრიქონს, არა? მე მივიღე სიმებიანი, ასე 1 2 3 მართლაც "1 2 3" 330 00:20:05,010 --> 00:20:07,260 ერთად \ 0 მიწურულს იგი. ეს არ არის int. 331 00:20:07,260 --> 00:20:10,420 ეს არ არის რიცხვი. როგორც ჩანს ხმების მაგრამ არა რეალურად. 332 00:20:10,420 --> 00:20:14,680 რას GetInt უნდა გავაკეთოთ? მას აქვს სკანირების რომ სიმებიანი მარცხნიდან მარჯვნივ, 333 00:20:14,680 --> 00:20:19,010 1 2 3 \ 0, და როგორღაც კონვერტირება მას ფაქტობრივი რიცხვი. 334 00:20:19,010 --> 00:20:21,010 ახლა, თქვენ შეიძლება გაერკვნენ, თუ როგორ უნდა გავაკეთოთ ეს. 335 00:20:21,010 --> 00:20:24,240 თუ ფიქრობთ თავში pset 2, თქვენ სავარაუდოდ მიიღო პატარა კომფორტული 336 00:20:24,240 --> 00:20:26,810 ერთად Caesar ან vigenere ასე რომ თქვენ შეგიძლიათ iterate მეტი ტექსტი, 337 00:20:26,810 --> 00:20:29,800 თქვენ შეგიძლიათ დააკონვერტიროთ chars to ints ერთად არჩევანი. სწორედ მთელი ბევრი სამუშაოა. 338 00:20:29,800 --> 00:20:32,800 რატომ არ გამოიძახა ფუნქცია, როგორიცაა sscanf რომ აკეთებს, რომ თქვენთვის? 339 00:20:32,800 --> 00:20:37,520 ამიტომ sscanf მოელის არგუმენტი, ამ შემთხვევაში მოუწოდა ხაზი, რომელიც სიმებიანი. 340 00:20:37,520 --> 00:20:41,310 მაშინ დააკონკრეტა, რომ შეთავაზებები, ძალიან ჰგავს printf, 341 00:20:41,310 --> 00:20:44,960 რას ველოდოთ ვხედავ ამ სტრიქონს? 342 00:20:44,960 --> 00:20:52,980 რა მე ვამბობ, აქ არის, მე მოველი, რომ ნახოთ ათობითი ნომერი და იქნებ ხასიათი. 343 00:20:52,980 --> 00:20:54,990 და ვნახავთ, თუ რატომ არის ამ შემთხვევაში რაღაც მომენტში. 344 00:20:54,990 --> 00:20:58,440 თურმე ამ ნოტაცია არის თქვენში პერსონალის 345 00:20:58,440 --> 00:21:00,840 ჩვენ დავიწყეთ ლაპარაკი მხოლოდ ერთი კვირის წინ. 346 00:21:00,840 --> 00:21:05,430 >> რა არის & n და & C აკეთებს ჩვენთვის აქ? [სტუდენტური პასუხები, გაუგებარია] 347 00:21:05,430 --> 00:21:07,610 >> Yeah. ეს მაძლევს მისამართი N და მისამართი გ. 348 00:21:07,610 --> 00:21:10,440 ახლა, თუ რატომ არის, რომ მნიშვნელოვანი? კარგად, თქვენ იცით, რომ ფუნქციონირებს C 349 00:21:10,440 --> 00:21:13,440 თქვენ ყოველთვის შეგიძლიათ დაბრუნების ღირებულება ან ფასი არ არის. 350 00:21:13,440 --> 00:21:16,630 თქვენ შეგიძლიათ დაბრუნების int, string, float, char, რასაც. 351 00:21:16,630 --> 00:21:21,150 ან თქვენ შეგიძლიათ დაბრუნების ბათილად, მაგრამ შეგიძლიათ მხოლოდ დაბრუნდნენ 1 რამ მაქსიმალურად. 352 00:21:21,150 --> 00:21:26,100 მაგრამ აქ ჩვენ გვინდა sscanf დაბრუნების ჩემთვის იქნებ int, ათობითი რიცხვი, 353 00:21:26,100 --> 00:21:29,240 და ასევე char, და მე რატომ char in მომენტში. 354 00:21:29,240 --> 00:21:34,250 ასე, რომ თქვენ ეფექტურად მინდა ვ დაბრუნებას 2 რამ, რომ უბრალოდ არ შეიძლება C. 355 00:21:34,250 --> 00:21:38,460 ასე რომ თქვენ შეგიძლიათ იმუშაოთ გარშემო რომ გადადის 2 მისამართები, 356 00:21:38,460 --> 00:21:43,710 რადგან, როგორც კი თქვენ გადასცემს ფუნქცია 2 მისამართები, რა შეიძლება, რომ გავაკეთოთ ფუნქცია მათთან? 357 00:21:43,710 --> 00:21:49,880 მას შეუძლია დაწეროს იმ მისამართებზე. თქვენ შეგიძლიათ გამოიყენოთ * ოპერაცია და "იქ" ყოველი იმ მისამართებზე. 358 00:21:49,880 --> 00:21:54,320 ეს ერთგვარი ამ backdoor მექანიზმი, მაგრამ ძალიან ხშირი შეცვლის ღირებულებების ცვლადებსა 359 00:21:54,320 --> 00:21:58,020 ზე მეტ მხოლოდ 1 ადგილი, ამ შემთხვევაში 2. 360 00:21:58,020 --> 00:22:04,590 ახლა შეამჩნია მე შემოწმება == to1, ხოლო შემდეგ ბრუნდებიან n თუ ეს ასეა, ფაქტობრივად, შეაფასებს ჭეშმარიტი. 361 00:22:04,590 --> 00:22:09,340 ასე რომ, რა ხდება? ისე, ტექნიკურად, რიგში, ჩვენ ნამდვილად გვინდა მოხდეს GetInt ეს. 362 00:22:09,340 --> 00:22:12,340 ჩვენ გვინდა გარჩევის, ასე ვთქვათ, ჩვენ გვინდა, რომ წაიკითხა სიმებიანი 363 00:22:12,340 --> 00:22:16,210 "1 2 3" და თუ ეს ასე გამოიყურება არსებობს მთელი რიგი არსებობს, 364 00:22:16,210 --> 00:22:21,360 რა ჩვენ ვეუბნებით sscanf გააკეთოთ დააყენა, რომ ნომერი, 1 2 3, ამ ცვლადის N ჩემთვის. 365 00:22:21,360 --> 00:22:26,060 რატომ, მაშინ, არ მაქვს ეს, ისევე? 366 00:22:26,060 --> 00:22:33,750 რა როლი ენიჭება ასევე ამბობდა, sscanf, თქვენ შესაძლოა, ასევე მიიღოთ ხასიათი აქ. 367 00:22:33,750 --> 00:22:36,890 [სტუდენტური მოლაპარაკე, გაუგებარია] >> არ - ათობითი წერტილი შეიძლება იმუშაოს. 368 00:22:36,890 --> 00:22:40,650 მოდით გამართავს, რომ ეგონა, ერთი წუთით. რა? 369 00:22:40,650 --> 00:22:42,570 [სტუდენტი გაუგებარია] >> ასე რომ, კარგი აზრის, ეს შეიძლება იყოს NULL ხასიათი. 370 00:22:42,570 --> 00:22:44,970 ეს ფაქტობრივად არ, ამ შემთხვევაში. ჰო? [სტუდენტი გაუგებარია] 371 00:22:44,970 --> 00:22:47,100 >> >> ASCII. ან ნება მიბოძეთ, განზოგადება კიდევ უფრო. 372 00:22:47,100 --> 00:22:49,670 % C არსებობს მხოლოდ შეცდომის შემოწმება. 373 00:22:49,670 --> 00:22:52,510 ჩვენ არ გვინდა იქ იქნება ხასიათი შემდეგ ნომერი, 374 00:22:52,510 --> 00:22:54,980 მაგრამ რა ამ საშუალებას ჩემთვის გააკეთოთ შემდეგი: 375 00:22:54,980 --> 00:23:01,270 თურმე sscanf, გარდა შენახვის ღირებულებების N და გ, ამ მაგალითში აქ, 376 00:23:01,270 --> 00:23:08,170 თუ რას ასევე ამჯამად არის ის დააბრუნებს რაოდენობის ცვლადები ეს დააყენა ღირებულებების სისტემაში 377 00:23:08,170 --> 00:23:13,330 ასე რომ, თუ თქვენ მხოლოდ აკრიფოთ 1 2 3, მაშინ მხოლოდ% d აპირებს ემთხვევა 378 00:23:13,330 --> 00:23:18,830 და მხოლოდ N იღებს შენახვას ღირებულება, როგორიცაა 1 2 3 და არაფერი იღებს დასვა C; 379 00:23:18,830 --> 00:23:20,870 გ რჩება ნაგვის ღირებულება, ასე ვთქვათ. 380 00:23:20,870 --> 00:23:23,550 Garbage რადგანაც ეს არასდროს ინიციალიზაცია როგორც გარკვეული მნიშვნელობა. 381 00:23:23,550 --> 00:23:29,390 ასე რომ ამ შემთხვევაში, sscanf დააბრუნებს 1, რადგან მე დასახლებული ერთ იმ მითითებას, 382 00:23:29,390 --> 00:23:33,650 ამ შემთხვევაში, დიდი. მაქვს int, ამიტომ გასათავისუფლებლად ხაზი უფასოა მეხსიერება 383 00:23:33,650 --> 00:23:37,150 რომ GetString რეალურად გამოყოფილი, და მერე დაბრუნდნენ n. 384 00:23:37,150 --> 00:23:42,210 სხვაგან, თუ თქვენ ოდესმე გვაინტერესებდა, სადაც ეს გაიმეორეთ განაცხადი მოდის, მოდის უფლება აქ. 385 00:23:42,210 --> 00:23:45,770 თუ, პირიქით, მე აკრიფოთ 1 2 3 foo, 386 00:23:45,770 --> 00:23:48,640 რამოდენიმე შემთხვევითი თანმიმდევრობა ტექსტი, sscanf აპირებს ვხედავ, 387 00:23:48,640 --> 00:23:51,500 Ooh, ნომერი, Ooh, ნომერი, Ooh, ნომერი, Ooh - ვ. 388 00:23:51,500 --> 00:23:54,190 და ეს აპირებს დააყენოს 1 2 3 in n. 389 00:23:54,190 --> 00:23:59,970 ის გეგმავს ვ დო, ხოლო შემდეგ დაბრუნდნენ 2. 390 00:23:59,970 --> 00:24:02,980 ამიტომ, უბრალოდ გამოყენებით ძირითადი განსაზღვრება scanf ქცევა, 391 00:24:02,980 --> 00:24:06,170 ძალიან მარტივი გზა - კარგად, კომპლექსი ერთი შეხედვით, მაგრამ დღის ბოლოს, 392 00:24:06,170 --> 00:24:11,460 საკმაოდ მარტივი მექანიზმი ამბობდა, არსებობს int, და თუ ასეა, ის არის, რომ ერთადერთი, რაც მე? 393 00:24:11,460 --> 00:24:14,950 და თეთრი სივრცე აქ არის მიზანმიმართული. თუ თქვენ წაიკითხავთ დოკუმენტაცია sscanf, 394 00:24:14,950 --> 00:24:18,690 ეს გიჩვენებთ, რომ თუ თქვენ მოიცავს ნაჭერი თეთრი სივრცის დასაწყისში ან დასასრულს, 395 00:24:18,690 --> 00:24:24,990 sscanf ძალიან საშუალებას მისცემს მომხმარებელს, სხვადსხვა მიზეზის გამო მოხვდა spacebar 1 2 3 და რომ იქნება ლეგიტიმური. 396 00:24:24,990 --> 00:24:28,310 ეს არ დაწეროთ ზე მომხმარებლის მხოლოდ იმიტომ, რომ ისინი მოხვდა spacebar დასაწყისში ან დასასრულს, 397 00:24:28,310 --> 00:24:32,160 რომელიც მხოლოდ პატარა უფრო მოსახერხებელი. 398 00:24:32,160 --> 00:24:34,160 >> ნებისმიერი კითხვები, მაშინ, on GetInts? ჰო? 399 00:24:34,160 --> 00:24:36,820 [სტუდენტური კითხვაზე, გაუგებარია] 400 00:24:36,820 --> 00:24:40,740 >> კარგი კითხვაა. რა მოხდება, თუ თქვენ უბრალოდ აკრეფილი char, ისევე როგორც F, და დააჭიროთ 401 00:24:40,740 --> 00:24:47,830 გარეშე ოდესმე აკრეფით 1 2 3; როგორ ფიქრობთ ქცევა ამ ხაზი კოდი ამის შემდეგ იქნება? 402 00:24:47,830 --> 00:24:50,500 ამიტომ sscanf შეიძლება დაფაროს, რომ ძალიან, რადგან ამ შემთხვევაში, 403 00:24:50,500 --> 00:24:56,280 ის არ აპირებს შეავსოთ n ან C; ის აპირებს ნაცვლად დაბრუნების 0. 404 00:24:56,280 --> 00:25:01,540 რა შემთხვევაში, მე ასევე არეალიდან, რომ სცენარი, რადგან მოსალოდნელ ღირებულების მინდა არის 1. 405 00:25:01,540 --> 00:25:07,310 მე მხოლოდ მინდა 1 და მხოლოდ 1 რამ ივსება. კარგი კითხვაა. სხვა? 406 00:25:07,310 --> 00:25:09,610 >> ყველა უფლება, მოდით არ გავლა ყველა ფუნქციების აქ, 407 00:25:09,610 --> 00:25:11,820 მაგრამ ერთი, რომ როგორც ჩანს, ალბათ, დარჩენილი ინტერესი 408 00:25:11,820 --> 00:25:14,530 არის GetString რადგან აღმოჩნდება, რომ GetFloat, GetInt, 409 00:25:14,530 --> 00:25:19,490 GetDouble, GetLongLong ყველა punt ბევრი მათი ფუნქციებს GetString. 410 00:25:19,490 --> 00:25:22,860 მოდით შევხედოთ თუ როგორ ხორციელდება აქ. 411 00:25:22,860 --> 00:25:27,040 ეს ერთი გამოიყურება პატარა კომპლექსი, მაგრამ იგი იყენებს იგივე საფუძვლები 412 00:25:27,040 --> 00:25:29,680 რომ ჩვენ ალაპარაკდა გასულ კვირას. ასე რომ GetString, 413 00:25:29,680 --> 00:25:32,670 რომელიც იღებს არ არგუმენტი როგორც პოსტი ბათილად აქ, 414 00:25:32,670 --> 00:25:37,110 და ის დააბრუნებს string, ამიტომ მე ვაცხადებ სიმებიანი ბუფერული. 415 00:25:37,110 --> 00:25:39,670 მე ნამდვილად არ ვიცი, რა, რომ იქნება გამოყენებული არ არის, მაგრამ ჩვენ დავინახავთ. 416 00:25:39,670 --> 00:25:42,950 ჰგავს სიმძლავრე, ჩვეულებრივ, 0; არ დანამდვილებით, სადაც ეს ხდება. 417 00:25:42,950 --> 00:25:44,920 არ არის დარწმუნებული რა N იქნება გამოყენებული არ არის. 418 00:25:44,920 --> 00:25:47,860 მაგრამ ახლა ის მიღების ცოტა უფრო საინტერესო, ასევე ხაზი 243, 419 00:25:47,860 --> 00:25:51,760 ვაცხადებთ int გ, ეს არის ერთგვარი სულელური დეტალურად. 420 00:25:51,760 --> 00:25:58,080 Char არის 8 ბიტი და 8 ბიტი შენახვა შეუძლია, თუ რამდენი სხვადასხვა ღირებულებების? 421 00:25:58,080 --> 00:26:03,310 256. პრობლემა ისაა, თუ თქვენ გინდათ რომ აქვს 256 სხვადასხვა ASCII სიმბოლოებს, 422 00:26:03,310 --> 00:26:06,210 რაც არსებობს, თუ ფიქრობთ, რომ უკან, და ეს არ არის რაღაც გვემახსოვრება. 423 00:26:06,210 --> 00:26:09,100 მაგრამ თუ თქვენ ფიქრობთ, თავში რომ დიდი ASCII ჩარტში გვქონდა კვირის წინ 424 00:26:09,100 --> 00:26:13,780 იყო, იმ შემთხვევაში, 128 ან 256 ASCII სიმბოლოებს. 425 00:26:13,780 --> 00:26:16,220 ჩვენ ყველა ნიმუში 0 და 1 არის up. 426 00:26:16,220 --> 00:26:19,410 სწორედ პრობლემა თუ გსურთ შეძლებს აღმოაჩინოს შეცდომა. 427 00:26:19,410 --> 00:26:23,290 რადგან თუ თქვენ უკვე იყენებს 256 ფასეულობების თქვენი გმირები, 428 00:26:23,290 --> 00:26:26,390 თქვენ არ ნამდვილად გეგმავენ წინ, რადგან ახლა არ გაქვთ გზა ამბობდა, 429 00:26:26,390 --> 00:26:29,750 "ეს არ არის legit ხასიათი, ეს ზოგიერთი მცდარი გაგზავნა." 430 00:26:29,750 --> 00:26:32,430 მერე რა მსოფლიო ჯერ არის, ისინი იყენებენ შემდეგი ფასეულობად, 431 00:26:32,430 --> 00:26:35,790 რაღაც int ისე, რომ თქვენ გაქვთ Crazy რაოდენობის ბიტი, 432 00:26:35,790 --> 00:26:39,610 32 4 მილიარდი შესაძლო მნიშვნელობებია, ასე რომ თქვენ შეგიძლიათ უბრალოდ დასრულდება up გამოყენებით, 433 00:26:39,610 --> 00:26:44,800 არსებითად, 257 მათგანი, 1 რომლის აქვს განსაკუთრებული მნიშვნელობა როგორც შეცდომა. 434 00:26:44,800 --> 00:26:49,190 >> მოდით ვნახოთ, როგორ ეს სამუშაოები. შეესაბამება 246, მაქვს ამ დიდი ხოლო loop 435 00:26:49,190 --> 00:26:54,530 რომელიც მოუწოდებდა fgetc ვ მნიშვნელობა ფაილი, getc და შემდეგ stdin. 436 00:26:54,530 --> 00:26:59,030 თურმე ეს მხოლოდ უფრო ზუსტად გზა რომ "წაიკითხა შეიტანენ კლავიატურაზე." 437 00:26:59,030 --> 00:27:02,730 მიწოდების სტანდარტული საშუალებებით კლავიატურის, სტანდარტულ გამოსავალზე ნიშნავს ეკრანზე, 438 00:27:02,730 --> 00:27:06,920 და სტანდარტული შეცდომა, რომელიც ჩვენ ვხედავთ pset 4, ნიშნავს ეკრანზე, 439 00:27:06,920 --> 00:27:09,670 მაგრამ განსაკუთრებული ნაწილი ეკრანზე ასე რომ ის conflated 440 00:27:09,670 --> 00:27:13,760 ფაქტობრივი გამომავალი რომ თქვენ აპირებდით ბეჭდვა, მაგრამ უფრო, რომ მომავალში. 441 00:27:13,760 --> 00:27:19,430 ამიტომ fgetc უბრალოდ ნიშნავს წაიკითხა ხასიათი კლავიატურის, და ჩაწეროთ იგი აქ? 442 00:27:19,430 --> 00:27:24,000 ჩაწეროთ იგი C და შემდეგ შეამოწმეთ, ამიტომ მე უბრალოდ გამოყენებით გარკვეული ლოგიკური conjunctions აქ, 443 00:27:24,000 --> 00:27:28,430 შეამოწმეთ, რომ არ თანაბარი \ n, ამიტომ მომხმარებელს უკვე დააჭიროთ. 444 00:27:28,430 --> 00:27:31,510 ჩვენ გვინდა, რომ შეწყვიტოს იმ ეტაპზე, ბოლოს მარყუჟი, და ჩვენ ასევე გვინდა შევამოწმოთ 445 00:27:31,510 --> 00:27:36,170 ამისთვის სპეციალური მუდმივი, EOF, რომელიც თუ იცით ან გამოიცნოს - რას უჭერენ მხარს? 446 00:27:36,170 --> 00:27:39,860 ფაილის დასასრულს. ასე რომ, ეს სახის nonsensical, რადგან თუ მე აკრეფის დროს კლავიატურაზე, 447 00:27:39,860 --> 00:27:41,900 იქ მართლაც არ ფაილი ჩართული ამ, 448 00:27:41,900 --> 00:27:44,330 მაგრამ ეს მხოლოდ სახის generic ტერმინს ვგულისხმობ 449 00:27:44,330 --> 00:27:50,320 რომ არაფერი მოდის ადამიანის თითების. EOF. ფაილის დასასრულს. 450 00:27:50,320 --> 00:27:52,600 როგორც განზე, თუ თქვენ ოდესმე მოხვდა კონტროლის დ თქვენს კლავიატურაზე, 451 00:27:52,600 --> 00:27:54,680 არ, რომ თქვენ ჯერ კიდევ; თქვენ მოხვდა კონტროლის გ. 452 00:27:54,680 --> 00:27:57,920 მაგრამ კონტროლის დ უგზავნის ამ სპეციალური მუდმივი მოუწოდა EOF. 453 00:27:57,920 --> 00:28:03,100 >> ახლა ჩვენ მხოლოდ გარკვეული დინამიური მეხსიერების გამოყოფის. 454 00:28:03,100 --> 00:28:06,460 ასე რომ, თუ n + 1> მოცულობა, ახლა მე ახსნას n. 455 00:28:06,460 --> 00:28:09,380 N არის ზუსტად რამდენი ბაიტი არის ამჟამად ბუფერული, 456 00:28:09,380 --> 00:28:11,970 სიმებიანი რომ თქვენ გაკეთებული მშენებლობაზე საწყისი მომხმარებელს. 457 00:28:11,970 --> 00:28:16,240 თუ თქვენ გაქვთ მეტი სიმბოლოების თქვენი ბუფერული ვიდრე თქვენ გაქვთ შესაძლებლობები ბუფერული, 458 00:28:16,240 --> 00:28:20,760 ინტუიციურად, თუ რა უნდა გავაკეთოთ შემდეგ არის გამოყოს მეტი ტევადობის. 459 00:28:20,760 --> 00:28:24,490 მე ვაპირებ skim მეტი ზოგიერთი არითმეტიკა აქ 460 00:28:24,490 --> 00:28:26,900 და ფოკუსირება მხოლოდ ამ ფუნქციას აქ. 461 00:28:26,900 --> 00:28:29,170 თქვენ იცით, თუ რა არის malloc, ან თუნდაც ზოგადად იცნობს. 462 00:28:29,170 --> 00:28:32,380 Take გამოიცანით რა realloc აკეთებს. [სტუდენტური პასუხი, გაუგებარია] 463 00:28:32,380 --> 00:28:35,690 >> Yeah. და ეს არ საკმაოდ დასძინა მეხსიერება; ეს reallocates მეხსიერების შემდეგნაირად: 464 00:28:35,690 --> 00:28:40,530 თუ მაინც ოთახი დასასრულს სიმებიანი გადმოგცეთ უფრო, რომ მეხსიერების 465 00:28:40,530 --> 00:28:43,370 ვიდრე ეს თავდაპირველად გაძლევთ, მაშინ თქვენ მიიღებთ რომ დამატებითი მეხსიერება. 466 00:28:43,370 --> 00:28:46,640 ასე რომ თქვენ შეგიძლიათ მხოლოდ აყენებს სიმები გმირები თავში დაბრუნება თავში დაბრუნება. 467 00:28:46,640 --> 00:28:49,290 მაგრამ თუ ეს ასე არ არის საქმე, იმიტომ, რომ თქვენ დაელოდა გრძელია 468 00:28:49,290 --> 00:28:51,700 და რაღაც შემთხვევითი მიიღო plopped მეხსიერებაში არსებობს, მაგრამ არსებობს დამატებითი 469 00:28:51,700 --> 00:28:56,480 მეხსიერების ქვემოთ აქ, რომ okay. Realloc აპირებს ყველა მძიმე მოხსნას თქვენთვის, 470 00:28:56,480 --> 00:28:58,810 გადაადგილება string თქვენ იკითხება ამგვარად შორს აქ, 471 00:28:58,810 --> 00:29:02,550 დააყენა მისი დანგრევა იქ და შემდეგ მოგცემთ კიდევ რამდენიმე პოდიუმზე იმ ეტაპზე. 472 00:29:02,550 --> 00:29:05,610 ამრიგად, ტალღა მხრივ, მინდა ვთქვა, რომ რა GetString აკეთებს 473 00:29:05,610 --> 00:29:09,540 არის ის დაწყებული მცირე ბუფერული, იქნებ 1 Single ხასიათი, 474 00:29:09,540 --> 00:29:12,300 და თუ მომხმარებლის ტიპების 2 გმირები, GetString მთავრდება 475 00:29:12,300 --> 00:29:15,210 მოუწოდებდა realloc და ამბობს, "Ooh, 1 სიმბოლოს საკმარისი არ იყო. 476 00:29:15,210 --> 00:29:18,480 მომეცი 2 სიმბოლო. ' თუ წაიკითხავთ მეშვეობით ლოგიკა მარყუჟის, 477 00:29:18,480 --> 00:29:21,070 იგი აპირებს ამბობენ, 'Ooh, მომხმარებლის აკრეფილი 3 სიმბოლო. 478 00:29:21,070 --> 00:29:25,690 მომეცი ახლა არ 2 მაგრამ 4 სიმბოლოზე, მაშინ მომეცი 8, მაშინ მაძლევს 16 და 32. " 479 00:29:25,690 --> 00:29:28,180 ის ფაქტი, რომ მე გააორმაგოს მოცულობა ყოველ ჯერზე 480 00:29:28,180 --> 00:29:30,320 იმას ნიშნავს, რომ ბუფერული არ აპირებს იზრდება ნელა. 481 00:29:30,320 --> 00:29:35,870 იგი აპირებს იზრდება სუპერ სწრაფი, და რა შეიძლება იყოს უპირატესობა რომ? 482 00:29:35,870 --> 00:29:38,540 რატომ გააორმაგოს ზომა ბუფერული, მიუხედავად იმისა, მომხმარებლის 483 00:29:38,540 --> 00:29:41,450 შეიძლება უბრალოდ უნდა 1 დამატებითი ხასიათი კლავიატურის? 484 00:29:41,450 --> 00:29:44,830 [სტუდენტური პასუხი, გაუგებარია]. >> რა არის რომ? 485 00:29:44,830 --> 00:29:46,750 სწორედ. თქვენ არ იზრდება, როგორც ხშირად. 486 00:29:46,750 --> 00:29:48,870 და ეს მხოლოდ სახის - you're ხეჯირების თქვენი ფსონები აქ. 487 00:29:48,870 --> 00:29:54,150 იდეა მყოფი რომ თქვენ არ მინდა მოვუწოდო realloc ბევრი, რადგან ეს tends უნდა იყოს ნელი. 488 00:29:54,150 --> 00:29:56,840 ნებისმიერ დროს თქვენ ჰკითხავთ მოქმედი სისტემის მეხსიერება, როგორც თქვენ მალე ვხედავ 489 00:29:56,840 --> 00:30:00,620 in მომავალი პრობლემა კომპლექტი, იგი აპირებს გარკვეული დრო დაჭირდეს. 490 00:30:00,620 --> 00:30:04,980 ასე რომ მინიმუმამდე შემცირების იმ დროის, თუნდაც თქვენ გაყვანაა გარკვეული სივრცე, tends იყოს კარგია. 491 00:30:04,980 --> 00:30:07,250 >> მაგრამ თუ ჩვენ წაკითხულად მეშვეობით დასკვნითი ნაწილი GetString აქ, 492 00:30:07,250 --> 00:30:10,880 და ისევ, გაგება თითოეული ხაზი აქ არ არის ასე მნიშვნელოვანი დღეს. 493 00:30:10,880 --> 00:30:14,830 მაგრამ შეამჩნია, რომ ეს საბოლოოდ მოუწოდებს malloc ერთხელ, და ეს გამოყოფს 494 00:30:14,830 --> 00:30:16,980 ზუსტად ისე, როგორც ბევრი bytes როგორც სჭირდება სიმებიანი 495 00:30:16,980 --> 00:30:21,620 და მაშინ ისვრის შორს დარეკვით უფასო, ზედმეტად დიდი ბუფერული, 496 00:30:21,620 --> 00:30:23,510 თუ იგი მართლაც მიიღო გაორმაგდა ძალიან ბევრჯერ. 497 00:30:23,510 --> 00:30:25,970 მოკლედ, ასე GetString მუშაობს ყველა ამ დროს. 498 00:30:25,970 --> 00:30:30,100 ყველა ეს იმას წაკითხვის ერთი ხასიათი დროს ისევ და ისევ და ისევ 499 00:30:30,100 --> 00:30:37,930 და ყოველ ჯერზე მას სჭირდება დამატებითი მეხსიერება, იგი სთხოვს ოპერაციული სისტემის ეს დარეკვით realloc. 500 00:30:37,930 --> 00:30:41,660 ნებისმიერი კითხვები? ყველა უფლება. 501 00:30:41,660 --> 00:30:45,220 >> თავდასხმა. ახლა, როდესაც ჩვენ გვესმის პოინტერები, ან თუნდაც 502 00:30:45,220 --> 00:30:47,560 უფრო იცნობს პოინტერები, 503 00:30:47,560 --> 00:30:50,020 განვიხილოთ, თუ როგორ მთელი მსოფლიო იწყებს დაიშალოს 504 00:30:50,020 --> 00:30:53,160 თუ თქვენ არ საკმაოდ წინააღმდეგ შეჯიბრებითობის მომხმარებლებს, 505 00:30:53,160 --> 00:30:55,180 ადამიანები, რომლებიც ცდილობენ hack თქვენს სისტემაში. 506 00:30:55,180 --> 00:31:00,260 ადამიანები, რომლებიც ცდილობენ მოიპარონ თქვენი პროგრამული უზრუნველყოფა მიერ circumventing ზოგიერთი სარეგისტრაციო კოდი 507 00:31:00,260 --> 00:31:02,150 რომ მათ შეიძლება სხვაგვარად უნდა აკრიფოთ სისტემაში 508 00:31:02,150 --> 00:31:04,860 შეხედეთ ამ მაგალითს აქ, რაც არის C კოდი 509 00:31:04,860 --> 00:31:07,920 რომ აქვს ფუნქცია ძირითად ბოლოში, რომ მოუწოდებს ფუნქცია foo, 510 00:31:07,920 --> 00:31:12,100 და ეს რა არის გავლით უნდა foo? [სტუდენტური] ერთჯერადი არგუმენტი. 511 00:31:12,100 --> 00:31:15,660 >> უცოლო არგუმენტი. ამიტომ argv [1], რაც იმას ნიშნავს, პირველი სიტყვა მომხმარებლის აკრეფილი 512 00:31:15,660 --> 00:31:19,150 ბრძანებათა ზოლს შემდეგ a.out ან რასაც პროგრამის ეწოდება. 513 00:31:19,150 --> 00:31:24,920 ამიტომ foo, ზედა, იღებს in char *, მაგრამ char * მხოლოდ რა? 514 00:31:24,920 --> 00:31:28,860 სიმებიანი. არაფერია ახალი აქ, და რომ სტრიქონს თვითნებურად მიმდინარეობს მოუწოდა ბარი. 515 00:31:28,860 --> 00:31:36,090 ამ ხაზის აქ, char გ [12], ხოლო სახის ნახევრად ტექნიკური ინგლისური, რა არის ეს ხაზი აკეთებს? 516 00:31:36,090 --> 00:31:40,640 მასივი -? პერსონაჟები. მომეცი მასივი 12 სიმბოლოს. 517 00:31:40,640 --> 00:31:44,970 ასე რომ, ჩვენ შეიძლება მოვუწოდებთ ამ ბუფერულ. ეს ტექნიკურად მოუწოდა C, მაგრამ ბუფერულ პროგრამირებაში 518 00:31:44,970 --> 00:31:47,890 მხოლოდ იმას ნიშნავს, bunch of სივრცეში, რომ თქვენ შეგიძლიათ განათავსოთ რაღაცები სისტემაში 519 00:31:47,890 --> 00:31:49,940 >> მაშინ ბოლოს, memcpy, ჩვენ არ გამოიყენება ადრე. 520 00:31:49,940 --> 00:31:52,380 მაგრამ თქვენ ალბათ შეუძლია გამოიცნოს, თუ რას აკეთებს. ეს აკოპირებს მეხსიერება. 521 00:31:52,380 --> 00:31:58,790 რას აკეთებთ? ისე, ეს აშკარად აკოპირებს ბარი, მისი შეყვანის, შევიდა გ, 522 00:31:58,790 --> 00:32:03,420 მაგრამ მხოლოდ სიგრძეზე ბარი. 523 00:32:03,420 --> 00:32:07,440 მაგრამ bug აქ. 524 00:32:07,440 --> 00:32:14,500 Okay, ასე ტექნიკურად ჩვენ უნდა ნამდვილად strlen (ბარი) x sizeof (char), რომ სწორი. 525 00:32:14,500 --> 00:32:17,920 მაგრამ უარეს შემთხვევაში აქ, მოდით ვივარაუდოთ, რომ that's - ასე, okay. 526 00:32:17,920 --> 00:32:23,760 მაშინ არსებობს 2 ბაგები. ამიტომ sizeof (char), ყველა უფლება, მოდით ეს ცოტა ფართო. 527 00:32:23,760 --> 00:32:28,860 ასე რომ ახლა მაინც bug, რაც? 528 00:32:28,860 --> 00:32:31,630 [სტუდენტური პასუხი, გაუგებარია] >> შემოწმება რა? Okay, ამიტომ ჩვენ უნდა შემოწმების 529 00:32:31,630 --> 00:32:35,010 for null, რადგან ცუდი რამ ხდება, როცა თქვენი კურსორი არის NULL, 530 00:32:35,010 --> 00:32:38,490 იმის გამო, რომ თქვენ შეიძლება დასრულდება მდე მიმდინარეობს, და თქვენ არ უნდა იყოს ოდესმე აპირებს null 531 00:32:38,490 --> 00:32:40,890 მიერ dereferencing იგი * ოპერატორი. 532 00:32:40,890 --> 00:32:45,250 ასე რომ კარგია, და რა ვაკეთებთ? ლოგიკურად არსებობს ხარვეზი აქაც. 533 00:32:45,250 --> 00:32:47,650 [სტუდენტური პასუხი, გაუგებარია] 534 00:32:47,650 --> 00:32:51,340 >> ამიტომ შეამოწმეთ თუ argc ≥ 2? 535 00:32:51,340 --> 00:32:54,130 Okay, ასე არსებობს 3 შეცდომები ამ პროგრამის აქ. 536 00:32:54,130 --> 00:33:00,080 ჩვენ არ შემოწმების თუ მომხმარებელი რეალურად აკრეფილი არაფერი შევიდა argv [1], კარგი. 537 00:33:00,080 --> 00:33:02,240 რა არის მესამე bug? ჰო? 538 00:33:02,240 --> 00:33:04,420 [სტუდენტური პასუხი, გაუგებარია] >> კარგი. 539 00:33:04,420 --> 00:33:09,590 ასე გადავამოწმეთ ერთი სცენარი. ჩვენ მინიშნებით შემოწმდება არ კოპირება მეტი მეხსიერების 540 00:33:09,590 --> 00:33:12,800 ვიდრე იქნებოდა აღემატებოდეს სიგრძეზე ბარი. 541 00:33:12,800 --> 00:33:15,720 ასე რომ, თუ სიმებიანი მომხმარებლის აკრეფილი არის 10 სიმბოლომდე 542 00:33:15,720 --> 00:33:18,260 ეს ამბობს, "მხოლოდ კოპირება 10 სიმბოლოს. ' 543 00:33:18,260 --> 00:33:21,140 და ეს okay, მაგრამ რა, თუ მომხმარებლის აკრეფილი სიტყვა ბრძანებათა ზოლში 544 00:33:21,140 --> 00:33:29,360 მოსწონს 20 ხასიათი სიტყვა, ეს არის და განაცხადა, რომ ასლი 20 სიმბოლოებს ბარი შევიდა რა? 545 00:33:29,360 --> 00:33:32,840 გ, სხვაგვარად ცნობილია როგორც ჩვენი ბუფერული, რაც იმას ნიშნავს, თქვენ უბრალოდ დაწერა მონაცემები 546 00:33:32,840 --> 00:33:35,950 დან 8 byte ადგილებში, რომ თქვენ არ საკუთარი, 547 00:33:35,950 --> 00:33:38,320 და თქვენ არ ფლობენ მათ გრძნობა, რომ თქვენ არასოდეს გამოყოფილი მათ. 548 00:33:38,320 --> 00:33:41,190 ასე რომ, ეს რა საყოველთაოდ ცნობილია, როგორც ბუფერული overflow თავდასხმა, 549 00:33:41,190 --> 00:33:46,650 ან ბუფერული overrun თავდასხმა და ეს თავდასხმა იმ გაგებით, რომ თუ მომხმარებელი 550 00:33:46,650 --> 00:33:50,650 ან პროგრამა რომ დაურეკეთ ფუნქცია აკეთებს ამ maliciously, 551 00:33:50,650 --> 00:33:53,780 რა ხდება შემდეგი შეიძლება იყოს საკმაოდ ცუდი. 552 00:33:53,780 --> 00:33:55,690 >> მოდით შევხედოთ ამ სურათს აქ. 553 00:33:55,690 --> 00:33:59,070 ეს სურათი წარმოადგენს თქვენი დასტის მეხსიერება. 554 00:33:59,070 --> 00:34:01,050 და გავიხსენოთ, რომ ყოველ ჯერზე რეკავთ ფუნქცია, 555 00:34:01,050 --> 00:34:04,520 თქვენ ამ პატარა ჩარჩო დასტის და შემდეგ კიდევ ერთი და მერე კიდევ ერთი და მერე მეორე. 556 00:34:04,520 --> 00:34:07,250 და დღემდე ჩვენ უბრალოდ სახის რეფერირებადი ამ მოშორებით როგორც მართკუთხედების 557 00:34:07,250 --> 00:34:09,380 ან იქნება ფორუმში ან ეკრანზე აქ. 558 00:34:09,380 --> 00:34:12,219 მაგრამ თუ ჩვენ მიუახლოვდით ერთ იმ rectangles, 559 00:34:12,219 --> 00:34:16,460 როცა რეკავთ ფუნქცია foo, აღმოჩნდება, რომ არსებობს უფრო დასტის 560 00:34:16,460 --> 00:34:18,739 შიგნით რომ ფარგლებში და რომ მართკუთხედი 561 00:34:18,739 --> 00:34:23,370 ვიდრე მხოლოდ X და Y და A და B, ისე, როგორც ვსაუბრობთ swap. 562 00:34:23,370 --> 00:34:25,949 თურმე არსებობს ქვედა დონის ინფორმაცია 563 00:34:25,949 --> 00:34:27,780 მათ შორის დაბრუნების მისამართზე. 564 00:34:27,780 --> 00:34:33,020 გამოდის, როდესაც მთავარ მოუწოდებს foo, მთავარ უნდა აცნობოს foo 565 00:34:33,020 --> 00:34:36,760 რა ძირითად მისამართი არის კომპიუტერის მეხსიერებაში. 566 00:34:36,760 --> 00:34:40,659 რადგან, წინააღმდეგ შემთხვევაში, როგორც კი foo კეთდება შესრულებაში, როგორც ამ შემთხვევაში აქ, 567 00:34:40,659 --> 00:34:43,790 ერთხელ თქვენ მიაღწიოს ამ მჭიდრო Curly გაუწიოს დასასრულს foo, 568 00:34:43,790 --> 00:34:48,860 როგორ heck ამჯამად foo ვიცი სად კონტროლის პროგრამა უნდა წავიდეს? 569 00:34:48,860 --> 00:34:52,460 თურმე პასუხი ამ კითხვაზე არის, რომ წითელი მართკუთხედი აქ. 570 00:34:52,460 --> 00:34:56,130 ეს წარმოადგენს მაჩვენებელი და ეს მდე კომპიუტერში შესანახად, დროებით, 571 00:34:56,130 --> 00:35:00,250 on ე.წ. დასტის მისამართი ძირითად ასე რომ როგორც კი foo კეთდება შესრულებაში, 572 00:35:00,250 --> 00:35:04,110 კომპიუტერი იცის სად და რა ხაზი მთავარ დაბრუნებოდნენ. 573 00:35:04,110 --> 00:35:06,900 შენახული ჩარჩო მაჩვენებელი ეხება მსგავსად ამ. 574 00:35:06,900 --> 00:35:09,620 ჩარ * ბარი აქ წარმოადგენს რა? 575 00:35:09,620 --> 00:35:14,740 ისე, ახლა ეს ლურჯი სეგმენტი აქ არის foo-ს ფარგლებში, თუ რა არის ბარი? 576 00:35:14,740 --> 00:35:18,300 Okay, ასე ბარი არის მხოლოდ არგუმენტი foo ფუნქცია. 577 00:35:18,300 --> 00:35:20,720 >> ახლა ჩვენ უკან ნაცნობი სურათი. 578 00:35:20,720 --> 00:35:22,960 არსებობს უფრო პერსონალის და მეტი distractions ეკრანზე 579 00:35:22,960 --> 00:35:27,490 მაგრამ ამ ღია ლურჯი სეგმენტი არის ის, რაც ჩვენ ხატვა chalkboard რაღაც მოსწონს swap. 580 00:35:27,490 --> 00:35:31,890 სწორედ ფარგლებში ამისთვის foo და ერთადერთი, რაც მას ახლა არის ბარი, 581 00:35:31,890 --> 00:35:34,630 რაც ამ პარამეტრს. 582 00:35:34,630 --> 00:35:39,840 მაგრამ რა უნდა იყოს დასტის თანახმად, ამ კოდექსით აქ? 583 00:35:39,840 --> 00:35:44,280 ჩარ გ [12]. ამიტომ, ჩვენ უნდა ნახოთ 12 მოედანზე მეხსიერება, 584 00:35:44,280 --> 00:35:46,260 გამოყოფილი ცვლადში გ. 585 00:35:46,260 --> 00:35:48,340 მართლაც გვაქვს, რომ ეკრანზე. 586 00:35:48,340 --> 00:35:51,650 ძალიან ზევით არის გ [0], და შემდეგ ავტორი ამ დიაგრამაზე 587 00:35:51,650 --> 00:35:55,130 არ გადაიტვირთოთ ხატვის ყველა კვადრატების მაგრამ არსებობს მართლაც არსებობს 12 588 00:35:55,130 --> 00:36:00,120 რადგან თუ გადავხედავთ ქვედა მარჯვენა, გ [11], თუ ითვლიან საწყისი 0, არის 12 ასეთი bytes. 589 00:36:00,120 --> 00:36:06,190 მაგრამ აქ პრობლემა: თუ საით არის გ მზარდი? 590 00:36:06,190 --> 00:36:10,390 სახის დაბრუნება ქვემოთ, არა? თუ ეს იწყება ზედა და იზრდება ბოლოში, 591 00:36:10,390 --> 00:36:13,480 არ ჰგავს ჩვენ დაუტოვებიათ საკუთარ თავს გაცილებით runway აქ ყველა. 592 00:36:13,480 --> 00:36:15,320 ჩვენ სახის მოხატული საკუთარ თავს კუთხეში, 593 00:36:15,320 --> 00:36:20,210 და რომ გ [11] არის სწორი წინააღმდეგ ბარი, რომელიც არის სწორი წინააღმდეგ დასტის ჩარჩო მაჩვენებელი, 594 00:36:20,210 --> 00:36:23,800 რაც უფლებას წინააღმდეგ დაბრუნების მისამართი; არ მეტი ოთახი. 595 00:36:23,800 --> 00:36:26,100 ასე რომ რა მნიშვნელობა, მაშინ, თუ თქვენ Screw up, 596 00:36:26,100 --> 00:36:30,460 და თქვენ ცდილობენ კითხულობს 20 ბაიტი შევიდა 12-byte ბუფერული? 597 00:36:30,460 --> 00:36:33,460 სად არიან 8 დამატებითი bytes აპირებს? 598 00:36:33,460 --> 00:36:36,370 Inside ყველაფერი, რომელთაგან ზოგიერთი არის სუპერ მნიშვნელოვანია. 599 00:36:36,370 --> 00:36:40,480 და ყველაზე მთავარია, პოტენციურად, არის წითელი ყუთი იქ დაბრუნების მისამართზე. 600 00:36:40,480 --> 00:36:44,720 იმის გამო, რომ ვივარაუდოთ, რომ თქვენ ან შემთხვევით ან adversarially 601 00:36:44,720 --> 00:36:48,040 გადავაწერო იმ 4 ბაიტი, რომ მომცეთ მისამართი, 602 00:36:48,040 --> 00:36:53,190 არა მხოლოდ ნაგვის, მაგრამ ნომერი, რომელიც ხდება წარმოადგინოს ფაქტობრივი მისამართი მეხსიერება? 603 00:36:53,190 --> 00:36:55,930 რა არის implicaiton, ლოგიკურად? 604 00:36:55,930 --> 00:36:59,080 [სტუდენტური პასუხები, გაუგებარია] >> ზუსტად. როდესაც foo ბრუნდება 605 00:36:59,080 --> 00:37:03,560 და ჰიტები, რომ curly გაუწიოს, პროგრამა აპირებს გაგრძელება არ დაბრუნდეს ძირითად, 606 00:37:03,560 --> 00:37:08,320 ის დაბრუნებას აპირებს რასაც მისამართის რომ წითელი ყუთი. 607 00:37:08,320 --> 00:37:11,560 >> ახლა კი, იმ შემთხვევაში, circumventing პროგრამული რეგისტრაციის, 608 00:37:11,560 --> 00:37:14,400 რა არის მისამართი რომელიც მიმდინარეობს დაბრუნდა ფუნქცია 609 00:37:14,400 --> 00:37:18,820 რომ ნორმალურად იღებს მოუწოდა შემდეგ თქვენ გადახდილი პროგრამული და inputted თქვენი სარეგისტრაციო კოდი? 610 00:37:18,820 --> 00:37:23,160 თქვენ შეიძლება სახის ხრიკი კომპიუტერის შევიდა არ აპირებს, მაგრამ ამის ნაცვლად, იზრდებოდა აქ. 611 00:37:23,160 --> 00:37:27,950 ან, თუ თქვენ მართლაც ჭკვიანი, მოწინააღმდეგის შეიძლება რეალურად აკრიფოთ დროს კლავიატურაზე, 612 00:37:27,950 --> 00:37:32,500 მაგალითად, არ რეალურ სიტყვას, არ 20 სიმბოლო, მაგრამ ვარაუდობენ, იგი 613 00:37:32,500 --> 00:37:36,200 ტიპის ზოგიერთ გმირები რომ წარმოადგენენ კოდი? 614 00:37:36,200 --> 00:37:38,860 და ეს არ იქნება C კოდი, ეს იქნება გმირები 615 00:37:38,860 --> 00:37:42,920 რომ წარმოადგენენ ორობითი მანქანა კოდები, 0 და 1 ს. 616 00:37:42,920 --> 00:37:46,740 მაგრამ ვარაუდობენ, ისინი ჭკვიანი საკმარისი ამისათვის, რათა როგორმე ჩასვით შევიდა GetString სწრაფი 617 00:37:46,740 --> 00:37:49,460 იმას, რაც არსებითად შედგენილი კოდი, 618 00:37:49,460 --> 00:37:56,900 და ბოლო 4 ბაიტი გადავაწერო, რომ დაბრუნების მისამართი, და რა მისამართი ამჯამად რომ შეყვანის შემთხვევაში? 619 00:37:56,900 --> 00:38:01,860 იგი ინახავს ამ წითელი სამკუთხედით მისამართი პირველი byte of ბუფერული. 620 00:38:01,860 --> 00:38:04,270 ასე, რომ თქვენ უნდა იყოს მართლაც ჭკვიანი, და ეს არის ბევრი სასამართლო და შეცდომა 621 00:38:04,270 --> 00:38:08,500 ცუდი ხალხი არსებობს, მაგრამ თუ შეგიძლიათ გაერკვნენ, თუ როგორ დიდი ამ ბუფერული არის, 622 00:38:08,500 --> 00:38:12,170 ისეთი, რომ ბოლო რამდენიმე bytes in შეყვანის რომ თქვენს მიერ მოწოდებული პროგრამის 623 00:38:12,170 --> 00:38:15,970 მოხდეს უნდა იყოს ექვივალენტური მისამართი დაწყების თქვენი ბუფერული, 624 00:38:15,970 --> 00:38:22,270 შეგიძლიათ ამის გაკეთება. თუ ვიტყვით, ჩვეულებრივ, hello, და \ 0, არის ის, რაც მთავრდება ბუფერული. 625 00:38:22,270 --> 00:38:27,860 მაგრამ თუ ჩვენ უფრო ჭკვიანი და ჩვენ შეავსოთ რომ ბუფერული რა ჩვენ მოვუწოდებთ generically თავდასხმა კოდი, 626 00:38:27,860 --> 00:38:31,920 ,,,: თავდასხმა, შეტევა, შეტევა, თავდასხმა, სადაც ეს მხოლოდ რაღაც რომ ჯერ რაღაც ცუდი. 627 00:38:31,920 --> 00:38:35,190 ისე, რა მოხდება, თუ თქვენ მართლაც ჭკვიანი, თქვენ შეიძლება ამის გაკეთება: 628 00:38:35,190 --> 00:38:41,740 წითელ ყუთში აქ არის თანმიმდევრობა ნომრები: 80, CO, 35, 08. 629 00:38:41,740 --> 00:38:44,890 გაითვალისწინეთ, რომ სიას ხმების რომ აქ. 630 00:38:44,890 --> 00:38:47,280 ეს წელს საპირისპირო მიზნით, მაგრამ უფრო, რომ სხვა დროს. 631 00:38:47,280 --> 00:38:51,430 გაითვალისწინეთ, რომ ამ დაბრუნების მისამართი უკვე შეგნებულად შეცვლილი 632 00:38:51,430 --> 00:38:54,970 ერთნაირი მისამართი აქ, არ მისამართი ძირითადი. 633 00:38:54,970 --> 00:39:00,170 ასე რომ, თუ ცუდი ბიჭი არის სუპერ ჭკვიანი, იგი აპირებს მოიცავს, რომ თავდასხმა კოდი 634 00:39:00,170 --> 00:39:02,890 მსგავსი რამ, 'წაშლა ყველა მომხმარებლის ფაილი.' 635 00:39:02,890 --> 00:39:06,320 ან "ასლი პაროლები," ან "შექმნა მომხმარებლის ანგარიში, რომ შემიძლია შეხვიდეთ. ' 636 00:39:06,320 --> 00:39:10,130 არაფერი მოხვედრა, და ეს ორივე საფრთხე და ძალა C. 637 00:39:10,130 --> 00:39:12,900 იმის გამო, რომ თქვენ გაქვთ მეხსიერების მეშვეობით პოინტერები 638 00:39:12,900 --> 00:39:15,950 და შეგიძლიათ აქედან გამომდინარე წერენ არაფერი გსურთ შევიდა კომპიუტერის მეხსიერებაში. 639 00:39:15,950 --> 00:39:19,290 შეგიძლიათ გააკეთოთ კომპიუტერის არაფერი გსურთ უბრალოდ 640 00:39:19,290 --> 00:39:22,780 რომელმაც მას ხტომა გარშემო ფარგლებში საკუთარი მეხსიერების სივრცე. 641 00:39:22,780 --> 00:39:27,230 ასე რომ, ამ დღეს, ამდენი პროგრამები და ამდენი საიტებზე, რომლებიც კომპრომეტირებული 642 00:39:27,230 --> 00:39:29,730 მოვხარშოთ ქვემოთ ხალხი უპირატესობების ამ. 643 00:39:29,730 --> 00:39:32,510 და ეს ალბათ, როგორიცაა super-დახვეწილი თავდასხმა, 644 00:39:32,510 --> 00:39:34,220 მაგრამ ეს ყოველთვის არ დაიწყოს, რომ გზა. 645 00:39:34,220 --> 00:39:36,770 >> რეალობაა ის, რომ რა ცუდი ხალხი ჩვეულებრივ გააკეთოთ, 646 00:39:36,770 --> 00:39:41,470 თუ არა ეს პროგრამა ბრძანებაში ან GUI პროგრამის ან ნახვა, 647 00:39:41,470 --> 00:39:43,290 არის უბრალოდ დაიწყოს უზრუნველყოფს სისულელეა. 648 00:39:43,290 --> 00:39:46,940 თქვენ აკრიფოთ მართლაც დიდი სიტყვა შევიდა საძიებო ველში და დააჭიროთ, 649 00:39:46,940 --> 00:39:49,030 და თქვენ დაველოდოთ თუ ნახვა დამსხვრევაზე. 650 00:39:49,030 --> 00:39:53,270 ან თქვენ დაველოდოთ თუ პროგრამის მანიფესტებმა რაიმე შეცდომა გაგზავნა. 651 00:39:53,270 --> 00:39:55,480 რადგან თუ თქვენ იღბლიანი, როგორც ცუდი ბიჭი, 652 00:39:55,480 --> 00:39:59,610 და თქვენს მიერ მოწოდებული ზოგიერთი გიჟები შეყვანის რომ Crashes პროგრამა, 653 00:39:59,610 --> 00:40:02,280 რაც იმას ნიშნავს, პროგრამისტი არ გავუსწრო თქვენი ცუდი საქციელის 654 00:40:02,280 --> 00:40:05,420 რაც იმას ნიშნავს, თქვენ ალბათ შეუძლია, თან საკმარისი ძალისხმევა, 655 00:40:05,420 --> 00:40:09,870 საკმარისი სასამართლო და შეცდომა, გაერკვნენ, თუ როგორ უნდა ეწარმოებინა უფრო ზუსტად თავდასხმა. 656 00:40:09,870 --> 00:40:15,900 ასე რომ იმდენი ნაწილი უსაფრთხოების არა მხოლოდ თავიდან აცილების ამ თავდასხმების საერთოდ, მაგრამ გამოვლენის მათ 657 00:40:15,900 --> 00:40:20,250 და რეალურად შევხედავთ ჟურნალებისთვის და ხედავს, თუ რა გიჟები საშუალებებით აქვს ხალხს აკრეფილი თქვენს ნახვა. 658 00:40:20,250 --> 00:40:26,040 რა ძიება პირობები არ ხალხს აკრეფილი თქვენს ვებგვერდზე იმედები overflowing ზოგიერთი ბუფერული? 659 00:40:26,040 --> 00:40:28,900 და ამ ყველა boils ქვემოთ მარტივი საფუძვლები რა მასივი, 660 00:40:28,900 --> 00:40:32,510 და რას ნიშნავს გამოყოფას და გამოიყენოს მეხსიერების? 661 00:40:32,510 --> 00:40:34,920 და დაკავშირებული, რომ, ძალიან, არის ამ. 662 00:40:34,920 --> 00:40:37,520 >> მოდით უბრალოდ შეხედვით შიგნით დისკის კიდევ ერთხელ. 663 00:40:37,520 --> 00:40:40,190 ასე, რომ თქვენ გავიხსენოთ საწყისი ორი კვირის წინ, რომ როდესაც თქვენ გადაიტანეთ ფაილები 664 00:40:40,190 --> 00:40:45,470 თქვენი recycle bin ან ნაგვის შეიძლება, რა ხდება? 665 00:40:45,470 --> 00:40:47,850 [სტუდენტური] არაფერი. >> Yeah, აბსოლუტურად არაფერს. საბოლოოდ, თუ თქვენ აწარმოებს დაბალი 666 00:40:47,850 --> 00:40:51,370 on დისკზე, Windows ან Mac OS დაიწყება წაშლის ფაილი თქვენთვის. 667 00:40:51,370 --> 00:40:53,670 მაგრამ თუ თქვენ გადაიტანეთ რაღაც არსებობს, მაშინ ეს სულაც არ ემუქრება. 668 00:40:53,670 --> 00:40:56,550 ყველა თქვენი კოლოკაცია, მეგობარი ან ოჯახის წევრი უნდა გააკეთოს არის ორმაგად დაწკაპეთ და voila. 669 00:40:56,550 --> 00:40:59,720 აქ ყველა sketchy ფაილი, რომელიც თქვენ სცადა წაშლა. 670 00:40:59,720 --> 00:41:02,840 ასე რომ ყველაზე მეტად ჩვენს არანაკლებ ვიცით, რომ თქვენ უნდა მარჯვენა ღილაკით ან გააკონტროლოს click 671 00:41:02,840 --> 00:41:05,320 და ცარიელი სანაგვე, ან რამე მაგდაგვარს. 672 00:41:05,320 --> 00:41:07,900 მაგრამ მაშინაც, რომ არ გააკეთოს საკმაოდ შეასრულა. 673 00:41:07,900 --> 00:41:11,340 რადგან მთავარი, რაც ხდება, როდესაც თქვენ გაქვთ ფაილი თქვენს ხისტ დისკზე 674 00:41:11,340 --> 00:41:14,590 , რომელიც წარმოადგენს გარკვეული სიტყვის დოკუმენტი ან JPEG? 675 00:41:14,590 --> 00:41:18,820 და ეს წარმოადგენს თქვენს ხისტ დისკზე, და ასე ვთქვათ ამ sliver აქ წარმოადგენს, რომ ფაილი, 676 00:41:18,820 --> 00:41:21,640 და ის შედგება მთელი bunch of 0 და 1 ს. 677 00:41:21,640 --> 00:41:25,470 რა ხდება, როდესაც თქვენ არა მხოლოდ გადაათრიეთ რომ ფაილი trashcan ან recycle bin, 678 00:41:25,470 --> 00:41:30,390 არამედ დაცლას ეს? 679 00:41:30,390 --> 00:41:32,820 სახის არაფერი. ეს არ არის აბსოლუტურად არაფერი არის. 680 00:41:32,820 --> 00:41:37,630 ახლა კი უბრალოდ არაფერს, რადგან პატარა რამე მოხდება სახით ამ მაგიდასთან. 681 00:41:37,630 --> 00:41:41,170 ამიტომ არსებობს გარკვეული მონაცემთა ბაზაში ან მაგიდასთან შიგნით კომპიუტერის მეხსიერების 682 00:41:41,170 --> 00:41:44,470 რომ არსებითად არის 1 სვეტი ფაილების სახელები, 683 00:41:44,470 --> 00:41:50,550 და 1 სვეტი for file ადგილმდებარეობის, სადაც ეს შეიძლება იყოს საიდან 123, მხოლოდ შემთხვევითი რიცხვების. 684 00:41:50,550 --> 00:41:58,270 ასე რომ, ჩვენ შეიძლება რაღაც x.jpg, და საიდან 123. 685 00:41:58,270 --> 00:42:02,870 და მერე რა იქნება, როდესაც თქვენ დაცლას თქვენი ურნის? 686 00:42:02,870 --> 00:42:06,720 რომ მიდის. მაგრამ რა არ მიდიან არის 0 და 1 ს. 687 00:42:06,720 --> 00:42:09,690 >> ასე რომ, რა, მაშინ, კავშირი pset 4? 688 00:42:09,690 --> 00:42:13,460 ისე, ერთად pset 4, მხოლოდ იმიტომ, რომ ჩვენ შემთხვევით წაშლილია 689 00:42:13,460 --> 00:42:15,890 კომპაქტური ფლეშ ბარათი ჰქონდა ყველა ეს ფოტოები, 690 00:42:15,890 --> 00:42:18,710 ან უბრალოდ იმიტომ, რომ ეს ცუდი იღბალი გახდა კორუმპირებული, 691 00:42:18,710 --> 00:42:21,170 არ ნიშნავს, რომ 0 და 1 ს არ ვართ ჯერ კიდევ არსებობს. 692 00:42:21,170 --> 00:42:23,920 იქნებ რამდენიმე მათგანი იკარგება, რადგან რაღაც გაბმულ კორუმპირებული 693 00:42:23,920 --> 00:42:26,530 იმ გაგებით, რომ ზოგიერთი 0 ს გახდა 1 და 1 ს გახდა 0 ს. 694 00:42:26,530 --> 00:42:30,460 ცუდი რამ შეიძლება მოხდეს, რადგან buggy პროგრამული უზრუნველყოფის ან წუნდებული აპარატურა. 695 00:42:30,460 --> 00:42:33,510 მაგრამ ბევრი იმ ბიტი, შესაძლოა, 100% მათგანი ჯერ კიდევ არსებობს, 696 00:42:33,510 --> 00:42:38,330 უბრალოდ კომპიუტერი ან კამერა არ იცის სად JPEG 1 დაიწყო 697 00:42:38,330 --> 00:42:41,660 და სადაც JPEG 2 დაიწყო, მაგრამ თუ, პროგრამისტი, 698 00:42:41,660 --> 00:42:45,800 ვიცი, ერთად ცოტა საზრიანი, სადაც იმ JPEGs არიან ან რაც მათ ჰგავს, 699 00:42:45,800 --> 00:42:49,570 შეგიძლიათ ანალიზი 0 და 1 და ამბობენ, 'Ooh. JPEG. Ooh, JPEG. ' 700 00:42:49,570 --> 00:42:52,830 თქვენ შეგიძლიათ დაწეროთ პროგრამა არსებითად მხოლოდ ან ხოლო loop 701 00:42:52,830 --> 00:42:56,100 რომ აღდგება თითოეული იმ ფაილებს. 702 00:42:56,100 --> 00:42:59,360 ასე რომ გაკვეთილი მაშინ, უნდა დაიწყოს "საიმედოდ" erasing ფაილი 703 00:42:59,360 --> 00:43:01,720 თუ გსურთ თავიდან ასაცილებლად საერთოდ. დიახ? 704 00:43:01,720 --> 00:43:06,940 [სტუდენტური კითხვაზე, გაუგებარია] 705 00:43:06,940 --> 00:43:11,150 >> Have მეტი მეხსიერების ვიდრე გააკეთეთ თქვენ წინაშე - 706 00:43:11,150 --> 00:43:14,790 Oh! კარგი კითხვაა. რატომ, მაშინ, შემდეგ ვასუფთავებ სანაგვე ყუთს, 707 00:43:14,790 --> 00:43:18,300 ამჯამად თქვენს კომპიუტერში გითხრათ, რომ თქვენ უფრო მეტი თავისუფალი სივრცე, ვიდრე გააკეთეთ თქვენ წინაშე? 708 00:43:18,300 --> 00:43:22,450 In მოკლედ, რადგან ეს ცრუობს. გაძლიერებული ტექნიკურად, თუ თქვენ ჩვენგან უფრო სივრცეში. 709 00:43:22,450 --> 00:43:26,720 რადგან ახლა თქვენ არ განაცხადა, თქვენ შეგიძლიათ განათავსოთ სხვა პერსონალის სადაც ეს ფაილი ერთხელ იყო, 710 00:43:26,720 --> 00:43:28,930 მაგრამ ეს არ ნიშნავს, ბიტი ვაპირებთ მოშორებით, 711 00:43:28,930 --> 00:43:33,070 და ეს არ ნიშნავს, ბიტი მიმდინარეობს შეიცვალა ყველა 0 ს, მაგალითად, თქვენი დაცვა. 712 00:43:33,070 --> 00:43:37,520 ამის საპირისპიროდ, თუ თქვენ "საიმედოდ" წაშლას ფაილი, ან ფიზიკური განადგურებით მოწყობილობის, 713 00:43:37,520 --> 00:43:40,810 რომ ნამდვილად არის ერთადერთი გზა, ზოგჯერ, გარშემო რომ. 714 00:43:40,810 --> 00:43:45,300 მაშ რატომ არ გვაქვს დატოვება რომ ნახევრად საშინელი შენიშვნა, და ვნახავთ თქვენ ორშაბათს. 715 00:43:45,300 --> 00:43:52,810 CS50.TV