1 00:00:00,000 --> 00:00:02,490 [Powered by Google Translate] [CS50 لائبریری] 2 00:00:02,490 --> 00:00:04,220 [نیٹ Hardison] [ہارورڈ یونیورسٹی] 3 00:00:04,220 --> 00:00:07,260 یہ [CS50 ہے. CS50.TV] 4 00:00:07,260 --> 00:00:11,510 CS50 لائبریری میں ایک مفید آلہ ہے کہ ہم آلے پر نصب کیا ہے 5 00:00:11,510 --> 00:00:15,870 آسان آپ کے لئے پروگرام لکھنے بنانے کے لئے ہے کہ ان پٹ کے لئے فوری طور پر صارفین. 6 00:00:15,870 --> 00:00:21,670 اس ویڈیو میں، ہم واپس پردے ھیںچو اور CS50 کی لائبریری میں بالکل وہی جو ہے دیکھو گے. 7 00:00:21,670 --> 00:00:25,520 >> C لائبریریوں پر ویڈیو میں، ہم کس طرح آپ نے # ہیڈر فائلوں میں شامل ہیں کے بارے میں بات 8 00:00:25,520 --> 00:00:27,570 آپ کے منبع کوڈ میں لائبریری کا 9 00:00:27,570 --> 00:00:31,150 اور پھر آپ کو لائبریری ایک بائنری فائل کے ساتھ منسلک مرحلے کے دوران لنک 10 00:00:31,150 --> 00:00:33,140 تالیف کے عمل کی. 11 00:00:33,140 --> 00:00:36,440 ہیڈر فائلوں کو لائبریری کے انٹرفیس کی وضاحت کریں. 12 00:00:36,440 --> 00:00:41,280 یہی وجہ ہے کہ، وہ کہ وسائل کی لائبریری میں دستیاب ہے، آپ کے لئے استعمال کرنے کے لئے تفصیل، 13 00:00:41,280 --> 00:00:45,250 تقریب کے ڈیکلیریشنز، constants، اور ڈیٹا کی اقسام کی طرح. 14 00:00:45,250 --> 00:00:48,890 بائنری لائبریری فائل لائبریری کے نفاذ پر مشتمل ہے، 15 00:00:48,890 --> 00:00:54,580 جو لائبریری کے ہیڈر فائلوں اور لائبریری C منبع کوڈ فائلوں سے مرتب کیا جاتا ہے. 16 00:00:54,580 --> 00:00:59,820 >> بائنری لائبریری فائل میں کیونکہ یہ بائنری میں، نظر میں بہت دلچسپ نہیں ہے. 17 00:00:59,820 --> 00:01:03,300 تو، لائبریری کے لئے ہیڈر بجائے فائلوں پر ایک نظر لے. 18 00:01:03,300 --> 00:01:07,710 اس صورت میں، صرف ایک ہیڈر کہا جاتا cs50.h. فائل ہے 19 00:01:07,710 --> 00:01:11,040 ہم صارف اسے نصب ہے ڈائریکٹری میں شامل ہیں 20 00:01:11,040 --> 00:01:15,150 ساتھ دوسرے نظام لائبریریوں کے ہیڈر کے فائلوں کے ساتھ. 21 00:01:15,150 --> 00:01:21,530 >> پہلی چیزیں ہیں جو آپ کو محسوس کریں گے میں سے ایک یہ ہے کہ cs50.h # دوسرے لائبریریوں سے ہیڈر فائلوں پر مشتمل ہے - 22 00:01:21,530 --> 00:01:25,670 فلوٹ، حدود، معیاری bool، اور معیاری lib. 23 00:01:25,670 --> 00:01:28,800 ایک بار پھر، نہیں وہیل reinventing کے اصول کے بعد 24 00:01:28,800 --> 00:01:33,490 ہم CS0 اوزار کہ دوسرے ہمارے لئے فراہم کی کا استعمال کرتے ہوئے لائبریری کی تعمیر ہے. 25 00:01:33,490 --> 00:01:38,690 >> اگلی چیز ہے جو آپ کو لائبریری میں دیکھ لیں گے یہ ہے کہ ہم نامی ایک نئی قسم کی وضاحت "STRING." 26 00:01:38,690 --> 00:01:42,330 یہ لائن واقعی صرف چار * کی قسم کے لیے ایک عرف تخلیق کرتا ہے، 27 00:01:42,330 --> 00:01:46,000 لہذا یہ صفات کے ساتھ نئی سٹرنگ قسم جادوئی نہیں کرتا imbue 28 00:01:46,000 --> 00:01:49,650 عام طور پر دیگر زبانوں میں سٹرنگ اشیاء کے ساتھ منسلک، 29 00:01:49,650 --> 00:01:50,850 اس طرح کی حد کے طور پر. 30 00:01:50,850 --> 00:01:55,180 وجہ سے ہم نے یہ کیا ہے رکتمی تفصیلات سے نئے پروگرامرز ڈھال ہے 31 00:01:55,180 --> 00:01:57,580 اشارہ یہاں تک کہ وہ تیار ہیں. 32 00:01:57,580 --> 00:02:00,130 >> ہیڈر فائل کے اگلے حصہ کے افعال میں سے اعلان ہے 33 00:02:00,130 --> 00:02:04,410 کہ CS50 لائبریری دستاویزات کے ساتھ فراہم کرتا ہے. 34 00:02:04,410 --> 00:02:06,940 یہاں تبصرے میں تفصیل کی سطح نوٹس. 35 00:02:06,940 --> 00:02:10,560 یہ انتہائی اہم ہے تاکہ لوگوں کو پتہ ہے کہ کس طرح یہ کام کرتا ہے استعمال کرنے کے لئے. 36 00:02:10,560 --> 00:02:19,150 ہم اس کے نتیجے میں اعلان، صارف اور واپسی کے حروف، ڈبلز، floats، ints فوری طور پر کام کرتا ہے، 37 00:02:19,150 --> 00:02:24,160 طویل چاہتا ہے، اور ڈور، ہمارے اپنے سٹرنگ قسم کا استعمال کرتے ہوئے. 38 00:02:24,160 --> 00:02:26,260 معلومات چھپا کے اصول کے بعد، 39 00:02:26,260 --> 00:02:31,640 ہم نے ایک الگ سی عمل درآمد فائل میں ہماری تعریف ڈال دیا ہے - cs50.c - 40 00:02:31,640 --> 00:02:35,110 صارف کا ذریعہ ڈائریکٹری میں واقع ہے. 41 00:02:35,110 --> 00:02:38,040 ہم نے وہ فائل فراہم کی تاکہ تم اس پر ایک نظر لے جا سکتے ہیں ہے، 42 00:02:38,040 --> 00:02:41,490 اس سے سیکھ سکتے ہیں اور مختلف مشینوں پر اگر تم چاہو تو recompile 43 00:02:41,490 --> 00:02:45,510 اگرچہ ہم لگتا ہے کہ یہ بہتر ہے اس کلاس کے لئے آلات پر کام کرنے کے. 44 00:02:45,510 --> 00:02:47,580 بہر حال، اس پر ایک نظر اب لے. 45 00:02:49,020 --> 00:02:54,620 >> افعال GetChar، GetDouble، GetFloat، GetInt، اور GetLongLong 46 00:02:54,620 --> 00:02:58,160 سب GetString تقریب کے سب سے اوپر پر تعمیر کیا ہے. 47 00:02:58,160 --> 00:03:01,510 یہ پتہ چلا ہے کہ وہ سب کے سب بنیادی طور پر اسی طرز پر عمل کریں. 48 00:03:01,510 --> 00:03:04,870 وہ تھوڑی دیر کے لوپ استعمال کرتے ہیں ان پٹ کی ایک لائن کے لئے صارف کو فوری طور پر. 49 00:03:04,870 --> 00:03:08,430 یہ صارف ایک خالی لائن آدانوں اگر ایک خاص قیمت واپس. 50 00:03:08,430 --> 00:03:11,750 انہوں نے مناسب قسم کے طور پر صارف کی ان پٹ کا تجزیہ کرنے کی کوشش، 51 00:03:11,750 --> 00:03:15,010 اسے چار، ایک ڈبل، فلوٹ، وغیرہ 52 00:03:15,010 --> 00:03:18,710 اور پھر وہ یا تو نتیجہ واپس اگر ان پٹ کامیابی کے ساتھ تصریف ہوئی 53 00:03:18,710 --> 00:03:21,330 یا وہ صارف reprompt. 54 00:03:21,330 --> 00:03:24,230 >> ایک اعلی سطح پر، وہاں واقعی مشکل یہاں کچھ نہیں ہے. 55 00:03:24,230 --> 00:03:28,760 تم اسی طرح تشکیل کوڈ لکھا ہو سکتا ہے ماضی میں یہ خود ہیں. 56 00:03:28,760 --> 00:03:34,720 شاید سب سے زیادہ خفیہ نظر حصہ sscanf کال ہے جو صارف کی ان پٹ parses ہے. 57 00:03:34,720 --> 00:03:38,160 Sscanf ان پٹ فارمیٹ تبادلوں کے خاندان کا حصہ ہے. 58 00:03:38,160 --> 00:03:42,300 یہ معیار io.h میں رہتا ہے، اور اس کا کام C سٹرنگ کا تجزیہ کرنے کے لئے ہے، 59 00:03:42,300 --> 00:03:46,520 ایک خاص شکل کے مطابق، متغیر میں تصریف کے نتائج کو ذخیرہ کرنے 60 00:03:46,520 --> 00:03:48,720 فون کرنے والے کی طرف سے فراہم کی ہے. 61 00:03:48,720 --> 00:03:53,570 چونکہ ان پٹ فارمیٹ کے تبادلوں کے افعال بہت مفید ہے، وسیع پیمانے پر استعمال کیا جاتا افعال ہیں 62 00:03:53,570 --> 00:03:56,160 جو سپر بدیہی نہیں ہیں، پہلے 63 00:03:56,160 --> 00:03:58,300 ہم کس طرح sscanf کام کریں گے. 64 00:03:58,300 --> 00:04:03,330 >> پہلے sscanf دلیل چار * ہے - ایک کردار پر ایک پوائنٹر. 65 00:04:03,330 --> 00:04:05,150 کے لیے تقریب مناسب طریقے سے کام کرنے 66 00:04:05,150 --> 00:04:08,340 کہ کردار C سٹرنگ کے پہلے کردار ہونا چاہئے، 67 00:04:08,340 --> 00:04:12,270 شہوت انگیز null \ 0 کردار کے ساتھ ختم. 68 00:04:12,270 --> 00:04:15,120 یہ تجزیہ سٹرنگ ہے 69 00:04:15,120 --> 00:04:18,269 دوسری sscanf دلیل ایک شکل سٹرنگ ہے، 70 00:04:18,269 --> 00:04:20,839 عام طور پر ایک تار مسلسل کے طور پر میں منظور، 71 00:04:20,839 --> 00:04:24,040 اور آپ جب printf استعمال کرنے سے پہلے اس طرح ایک تار دیکھا کر سکتے ہیں. 72 00:04:24,040 --> 00:04:28,650 کی شکل سٹرنگ میں فیصد تبادلوں کے specifier یہ اشارہ کرتا ہے کہ. 73 00:04:28,650 --> 00:04:30,850 کردار کو فوری طور پر ایک فیصد علامت کے بعد، 74 00:04:30,850 --> 00:04:35,430 سی قسم ہے کہ ہم چاہتے ہیں تبدیل کرنے sscanf کی طرف اشارہ کرتا ہے. 75 00:04:35,430 --> 00:04:40,090 GetInt میں تم نے دیکھا، کہ وہاں٪ ڈی اور فیصد کی سی ہے. 76 00:04:40,090 --> 00:04:48,690 اس کا مطلب یہ ہے کہ sscanf دشملو int کی کوشش کریں گے -٪ D - اور ایک چار -٪ C. 77 00:04:48,690 --> 00:04:51,510 کی شکل سٹرنگ میں ہر تبادلے specifier کے لئے، 78 00:04:51,510 --> 00:04:56,620 sscanf اس کی دلیل کی فہرست میں بعد میں اسی دلیل کی توقع رکھتا ہے. 79 00:04:56,620 --> 00:05:00,850 یہ دلیل ایک مناسب طریقے سے ٹائپ شدہ مقام پر کی طرف اشارہ کرنا ضروری ہے 80 00:05:00,850 --> 00:05:04,000 کے تبادلوں کا نتیجہ ہے جس میں محفوظ ہے. 81 00:05:04,000 --> 00:05:08,910 >> ایسا کرنے کی مخصوص طریقہ sscanf کال سے پہلے اسٹیک پر ایک متغیر کی تخلیق ہے 82 00:05:08,910 --> 00:05:11,440 ہر آئٹم ہے کہ آپ کو سٹرنگ سے تجزیہ کرنا چاہتے ہیں کے لئے 83 00:05:11,440 --> 00:05:15,520 ایمپرسینڈ - - اشارہ کو منتقل کرنے کی اور پھر ایڈریس آپریٹر کا استعمال 84 00:05:15,520 --> 00:05:19,100 sscanf کال ان متغیرات. 85 00:05:19,100 --> 00:05:22,720 تم نے دیکھا ہے کہ ہم GetInt میں بالکل ایسا کر سکتے ہیں. 86 00:05:22,720 --> 00:05:28,240 sscanf کال سے پہلے، ہم نے ایک کہا جاتا ن int اور اسٹیک پر ایک چار کال سی کا اعلان کرتے ہیں، 87 00:05:28,240 --> 00:05:32,340 اور ہم sscanf کال میں ان سے اشارہ گزر. 88 00:05:32,340 --> 00:05:35,800 اسٹیک پر ان متغیرات میں ڈال مختص خلا کا استعمال کرتے ہوئے میں ترجیح دی جاتی ہے 89 00:05:35,800 --> 00:05:39,350 ، malloc کے ساتھ ڈھیر، کیونکہ آپ malloc کال کی ہیڈ سے بچنے 90 00:05:39,350 --> 00:05:43,060 اور آپ کو میموری حمل کا پانی جاری کرنے کے بارے میں فکر کرنے کی ضرورت نہیں ہے. 91 00:05:43,060 --> 00:05:47,280 prefixed فیصد کی علامت کی طرف سے نہیں کردار سے تبادلوں کی فوری طور پر نہیں ہے. 92 00:05:47,280 --> 00:05:50,380 بلکہ وہ صرف شکل تفصیلات شامل کریں. 93 00:05:50,380 --> 00:05:56,500 >> مثال کے طور پر، اگر GetInt میں فارمیٹ سٹرنگ٪ D بجائے تھے 94 00:05:56,500 --> 00:05:59,800 sscanf خط ایک کے بعد ایک int کے لئے نظر آئے گا، 95 00:05:59,800 --> 00:06:04,360 جبکہ int تبدیل کرنے کی کوشش کریں گے، اس کے ساتھ کچھ اور نہیں کریں گے. 96 00:06:04,360 --> 00:06:07,440 صرف اس رعایت وائٹ ہے. 97 00:06:07,440 --> 00:06:11,030 وائٹ فارمیٹ سٹرنگ میں جگہ حروف وائٹ کے کسی بھی رقم سے ملتے ہیں - 98 00:06:11,030 --> 00:06:12,890 بالکل بھی نہیں ہے. 99 00:06:12,890 --> 00:06:18,100 تو، یہی وجہ ہے کہ تبصرہ کی قیادت اور / یا وائٹ پیچھے کے ساتھ ممکنہ طور پر ذکر ہے. 100 00:06:18,100 --> 00:06:22,910 لہذا، اس نقطہ یہ ہماری sscanf کال کی طرح لگ رہا ہے میں صارف کی ان پٹ سٹرنگ کا تجزیہ کرنے کی کوشش کریں گے 101 00:06:22,910 --> 00:06:25,380 ممکن معروف وائٹ کے لئے کی جانچ پڑتال کی طرف سے، 102 00:06:25,380 --> 00:06:29,300 int جو int متغیر (ن) میں تبدیل ذخیرہ کے بعد 103 00:06:29,300 --> 00:06:33,090 بعد وائٹ میں سے کچھ رقم کی طرف سے ہے، اور ایک کردار کے بعد 104 00:06:33,090 --> 00:06:35,810 چار متغیر سی میں محفوظ ہے. 105 00:06:35,810 --> 00:06:37,790 >> واپسی قیمت کے بارے میں کیا خیال ہے؟ 106 00:06:37,790 --> 00:06:41,560 Sscanf سے شروع ان پٹ لائن کی تشریح کرنے سے ختم ہو جائے گا، 107 00:06:41,560 --> 00:06:44,860 جب اس کے آخر تک پہنچ روکنے یا جب ان پٹ میں ایک کردار 108 00:06:44,860 --> 00:06:49,320 ایک شکل کردار سے مماثل نہیں یا جب وہ ایک تبادلہ نہیں کر سکتے ہیں. 109 00:06:49,320 --> 00:06:52,690 یہ واپسی قیمت جب وہ روک دیا اکیلا کے لئے استعمال کیا جاتا ہے. 110 00:06:52,690 --> 00:06:55,670 اگر یہ بند کر دیا، کیونکہ یہ ان پٹ سٹرنگ کے آخر تک پہنچ گئی 111 00:06:55,670 --> 00:07:00,630 کسی تبادلوں کو کرنے سے پہلے اور فارمیٹ سٹرنگ کا حصہ سے ملنے میں ناکامی کی صورت میں پیدا ہونے والی سے پہلے، 112 00:07:00,630 --> 00:07:04,840 پھر خصوصی مسلسل مسل اختتام کو اس لئے واپس بھیج چکے ہیں. 113 00:07:04,840 --> 00:07:08,200 دوسری صورت میں، یہ کامیاب تبادلوں کی تعداد واپس، 114 00:07:08,200 --> 00:07:14,380 جو 0، 1، یا 2 ہو سکتا ہے، کیونکہ ہم نے دو تبادلوں کے لئے کہا ہے. 115 00:07:14,380 --> 00:07:19,000 ہمارے معاملے میں، ہمیں اس بات کا یقین کر لیں کہ ہے کہ صارف کسی int اور صرف ایک int میں ٹائپ کرنے کے لئے کرنا چاہتے ہیں. 116 00:07:19,000 --> 00:07:23,370 >> لہذا، ہم sscanf 1 واپس کرنا چاہتے ہیں. دیکھو کیوں؟ 117 00:07:23,370 --> 00:07:26,850 اگر sscanf 0 واپس آئے، تو کوئی تبادلوں کی گئی، 118 00:07:26,850 --> 00:07:31,690 تو صارف ان پٹ کے آغاز میں ایک int سے کچھ ٹائپ. 119 00:07:31,690 --> 00:07:37,100 اگر sscanf 2 واپس، تو صارف کو مناسب طریقے سے ان پٹ کے آغاز میں میں نے ٹائپ کریں، 120 00:07:37,100 --> 00:07:41,390 لیکن وہ تو کچھ کردار غیر وائٹ بعد ٹائپ 121 00:07:41,390 --> 00:07:44,940 ٪ کے بعد سی تبادلوں کامیاب ہو گئے. 122 00:07:44,940 --> 00:07:49,570 واہ، یہ بہت ایک تقریب کے فون کا ایک طویل وضاحت ہے. 123 00:07:49,570 --> 00:07:53,460 ویسے بھی، اگر آپ sscanf اور اس کے بہن بھائیوں کے بارے میں مزید معلومات چاہتے ہیں، 124 00:07:53,460 --> 00:07:57,130 آدمی کے صفحات، گوگل، یا دونوں کو چیک کرنے کے لیے. 125 00:07:57,130 --> 00:07:58,780 کی شکل سٹرنگ کے اختیارات میں سے بہت سے ہیں، 126 00:07:58,780 --> 00:08:03,830 اور یہ آپ کو دستی محن کی بہت محفوظ جب سی میں تاروں کا تجزیہ کرنے کی کوشش کر سکتے ہیں 127 00:08:03,830 --> 00:08:07,180 >> لائبریری میں حتمی تقریب میں نظر GetString ہے. 128 00:08:07,180 --> 00:08:10,310 یہ پتہ چلا ہے کہ GetString ٹھیک سے لکھنے کے لئے ایک مشکل کام ہے، 129 00:08:10,310 --> 00:08:14,290 اگرچہ یہ اس طرح ایک آسان، عام کام کی طرح لگتا ہے. 130 00:08:14,290 --> 00:08:16,170 یہی وجہ ہے کہ مقدمہ؟ 131 00:08:16,170 --> 00:08:21,380 چلو، کہ ہم کس طرح لائن ذخیرہ کرنے جا رہے ہیں کے بارے میں سوچنا ہے کہ اندر صارف اقسام 132 00:08:21,380 --> 00:08:23,880 چونکہ ایک تار حروف کی ایک ہی تسلسل ہے، 133 00:08:23,880 --> 00:08:26,430 ہم اسٹیک پر ایک صف میں محفوظ کرنا چاہتے ہیں کر سکتے ہیں، 134 00:08:26,430 --> 00:08:31,250 لیکن ہم جانتے ہیں کہ کب تک صف ہونے جا رہا ہے جب ہم اس کا اعلان کرنے کی ضرورت گا. 135 00:08:31,250 --> 00:08:34,030 اسی طرح، اگر ہم اسے ڈھیر پر ڈال کرنا چاہتے ہیں، 136 00:08:34,030 --> 00:08:38,090 ہم malloc بائٹس کی تعداد ہے ہم ریزرو کرنا چاہتے ہیں کو منتقل کرنے کی ضرورت ہے، 137 00:08:38,090 --> 00:08:39,730 لیکن یہ ناممکن ہے. 138 00:08:39,730 --> 00:08:42,760 ہم نے کوئی اندازہ نہیں ہے کتنے حروف صارف میں ٹائپ گا 139 00:08:42,760 --> 00:08:46,590 سے پہلے صارف اصل میں ان کو ٹائپ کرتا ہے. 140 00:08:46,590 --> 00:08:50,720 >> ایک بولی اس مسئلہ کا حل صرف علاقے کا ایک بڑا حصہ محفوظ رکھتے ہیں، کا کہنا ہے کہ، ہے 141 00:08:50,720 --> 00:08:54,540 صارف کی ان پٹ کے لئے 1000 حروف کا ایک بلاک، 142 00:08:54,540 --> 00:08:57,980 یہ سوچتے ہیں کہ صارف کو ایک تار میں ٹائپ کبھی نہیں جب تک کہ گے. 143 00:08:57,980 --> 00:09:00,810 یہ دو وجوہات کی بنا پر ایک برا خیال ہے. 144 00:09:00,810 --> 00:09:05,280 پہلے سنبھالنے کے، کہ ڈور میں صارفین عام طور پر نہیں ٹائپ جب تک کہ، 145 00:09:05,280 --> 00:09:07,610 آپ کو میموری کا ایک بہت برباد کر سکتے ہیں. 146 00:09:07,610 --> 00:09:10,530 جدید مشینوں پر، یہ ایک مسئلہ نہیں اگر آپ ایسا کر سکتے ہیں 147 00:09:10,530 --> 00:09:13,890 ایک یا ایک سے دو الگ تھلگ کی مثالوں میں، 148 00:09:13,890 --> 00:09:17,630 لیکن اگر تم ایک لوپ میں صارف کی ان پٹ لے جا رہے ہیں اور بعد میں استعمال کرنے کے لئے ذخیرہ کرنے 149 00:09:17,630 --> 00:09:20,870 آپ کو فوری طور پر میموری کا ایک ٹن دودھ کر سکتے ہیں. 150 00:09:20,870 --> 00:09:24,450 کے علاوہ، اگر پروگرام آپ لکھ رہے ہیں کہ ایک چھوٹے کمپیوٹر کے لئے ہے - 151 00:09:24,450 --> 00:09:28,100 محدود میموری کے ساتھ ایک smartphone یا کچھ اور کی طرح ایک آلہ - 152 00:09:28,100 --> 00:09:32,060 اس حل مسائل تیزی سے ایک بہت کا سبب بن جائے گا. 153 00:09:32,060 --> 00:09:36,450 دوسرے، زیادہ سنگین نہیں کرنا وجہ یہ ہے کہ یہ آپ کا پروگرام چھوڑ دیتا ہے کمزور 154 00:09:36,450 --> 00:09:39,710 کیا ایک بفر اتپرواہ حملے کہا جاتا ہے. 155 00:09:39,710 --> 00:09:45,840 پروگرامنگ میں ایک بفر عارضی طور پر ان پٹ یا پیداوار کے اعداد و شمار جمع تھے میموری ہے، 156 00:09:45,840 --> 00:09:48,980 جو اس معاملے میں ہماری بلاک 1000 حروف ہے. 157 00:09:48,980 --> 00:09:53,370 ایک بفر اتپرواہ اس وقت ہوتی ہے جب ڈیٹا بلاک کے آخر ماضی کے وزٹرز کا ریکارڈ رکھا جائے گا. 158 00:09:53,370 --> 00:09:57,790 >> مثال کے طور پر، اگر کسی صارف کو اصل میں 1000 سے زیادہ حروف ٹائپ کرتا ہے. 159 00:09:57,790 --> 00:10:01,570 آپ کو یہ اتفاقی طور پر تجربہ ہو سکتا ہے جب arrays کے ساتھ پروگرامنگ. 160 00:10:01,570 --> 00:10:05,620 اگر آپ 10 ints کی ایک صف ہے، کچھ بھی نہیں آپ کو پڑھنے یا لکھنے کے لئے کی کوشش کر رہے سے روکتا ہے 161 00:10:05,620 --> 00:10:07,810 15th int. 162 00:10:07,810 --> 00:10:10,000 کوئی سنکلک انتباہ یا غلطیاں ہیں. 163 00:10:10,000 --> 00:10:13,250 پروگرام صرف براہ راست غلطیوں اور میموری تک رسائی حاصل 164 00:10:13,250 --> 00:10:18,150 جہاں یہ سوچتا ہے کہ 15th int ہے، اور یہ اپنے دوسرے متغیر ادلیکھت کر سکتے ہیں کریں گے. 165 00:10:18,150 --> 00:10:22,040 بدترین صورت میں، آپ کو آپ کے پروگرام کے اندرونی کچھ ادلیکھت کر سکتے ہیں 166 00:10:22,040 --> 00:10:26,820 کنٹرول کے نظام، آپ کے پروگرام کی وجہ سے اصل میں مختلف ہدایات پر عمل کرنے 167 00:10:26,820 --> 00:10:28,340 تم سے چاہتا تھا. 168 00:10:28,340 --> 00:10:31,360 >> اب، یہ اتفاقی طور پر کرنا عام نہیں ہے، 169 00:10:31,360 --> 00:10:35,150 لیکن یہ ایک منصفانہ عام ٹیکنالوجی کا ہے کہ برے لوگوں کے پروگراموں کو توڑنے کے لئے استعمال کرتے ہیں 170 00:10:35,150 --> 00:10:39,080 اور دوسرے لوگوں کے کمپیوٹر پر درنساوناپورن کوڈ ڈال دیا ہے. 171 00:10:39,080 --> 00:10:42,910 لہذا، ہم صرف ہماری بولی حل نہیں استعمال کر سکتے ہیں. 172 00:10:42,910 --> 00:10:45,590 ہم نے ایک کمزور ہونے سے ہمارے پروگرام کو روکنے کا طریقہ کی ضرورت ہے 173 00:10:45,590 --> 00:10:47,880 بفر اتپرواہ کے حملے. 174 00:10:47,880 --> 00:10:51,430 ایسا کرنے کے لئے، ہم اس بات کا یقین کر لیں کہ ہمارے بفر بڑھ جیسا کہ ہم پڑھ سکتے ہیں بنانے کے لئے کی ضرورت ہے 175 00:10:51,430 --> 00:10:53,850 صارف سے زیادہ ان پٹ. 176 00:10:53,850 --> 00:10:57,440 حل کیا ہے؟ ہم ایک ڈھیر مختص بفر کا استعمال کرتے ہیں. 177 00:10:57,440 --> 00:10:59,950 ہم چونکہ سائز تبدیل کر سکتے ہیں بازسائز realloc تقریب کا استعمال کرتے ہوئے، 178 00:10:59,950 --> 00:11:04,580 اور ہم دونوں کی تعداد کے ٹریک رکھنے کے لئے - بفر میں اگلی خالی عہدے کے سوچکانک 179 00:11:04,580 --> 00:11:08,390 اور کی حد یا بفر کی صلاحیت ہے. 180 00:11:08,390 --> 00:11:13,210 ایک صارف سے حروف میں ہم fgetc تقریب کا استعمال کرتے ہوئے وقت پڑھا. 181 00:11:13,210 --> 00:11:19,360 دلیل fgetc تقریب لیتا ہے - stdin - معیاری ان پٹ سٹرنگ پر ایک حوالہ ہے، 182 00:11:19,360 --> 00:11:23,810 جس میں ایک preconnected ان پٹ چینل ہے کہ صارف کی ان پٹ کو منتقل کرنے کا استعمال کیا جاتا ہے ہے 183 00:11:23,810 --> 00:11:26,270 ٹرمینل سے پروگرام. 184 00:11:26,270 --> 00:11:29,890 >> جب بھی ایک نئے کردار میں صارف اقسام، ہم دیکھ کر چیک کریں اگر انڈیکس 185 00:11:29,890 --> 00:11:35,810 اگلے مفت سلاٹ کے علاوہ 1 بفر کی صلاحیت سے زیادہ ہے. 186 00:11:35,810 --> 00:11:39,690 +1 کیونکہ اگر اگلے مفت انڈیکس 5 میں آتا ہے، 187 00:11:39,690 --> 00:11:44,150 تو ہمارے بفر کی لمبائی 6 شکریہ: 0 تخکرمن ہونا ضروری ہے. 188 00:11:44,150 --> 00:11:48,350 اگر ہم خلا سے باہر بفر میں چلتی ہے، تو ہم اس کا سائز تبدیل کرنے کی کوشش ہے، 189 00:11:48,350 --> 00:11:51,690 اس کو دگنا کرنے تاکہ ہم بار کی تعداد کم کر کے ہم اس کا سائز تبدیل 190 00:11:51,690 --> 00:11:54,760 اگر صارف ایک بہت طویل سٹرنگ میں ٹائپ کر رہا ہے. 191 00:11:54,760 --> 00:11:57,950 اگر سٹرنگ بھی طویل ہو گیا ہے یا اگر ہم ڈھیر میموری سے باہر چلانے کے، 192 00:11:57,950 --> 00:12:01,350 ہم اپنے بفر اور واپسی شہوت انگیز null مفت. 193 00:12:01,350 --> 00:12:04,170 >> آخر میں، ہم بفر پر حروف شامل ہیں. 194 00:12:04,170 --> 00:12:08,200 ایک بار صارف ہٹ یا واپس درج کریں، ایک نئی سطر کا اشارہ 195 00:12:08,200 --> 00:12:12,050 یا خصوصی حروف - کنٹرول D - جو ان پٹ کے ختم ہونے کا اشارہ ہے، 196 00:12:12,050 --> 00:12:16,240 ہم اگر صارف اصل میں کسی بھی چیز میں ٹائپ بالکل دیکھنے کے لئے چیک کرتا ہوں. 197 00:12:16,240 --> 00:12:18,820 اگر نہیں، تو ہم شہوت انگیز null واپس. 198 00:12:18,820 --> 00:12:22,280 دوسری صورت میں، کیونکہ ہمارا بفر شاید بڑے سے ہمیں ضرورت ہے، 199 00:12:22,280 --> 00:12:24,830 بدترین صورت میں یہ تقریبا دو گنا بڑی ہے جیسا کہ ہمیں ضرورت ہے 200 00:12:24,830 --> 00:12:27,830 کیونکہ ہم ہر بار جب ہم کا سائز تبدیل، ڈبل 201 00:12:27,830 --> 00:12:31,840 ہم نے خلا کی رقم ہے جو ہمیں درکار کا استعمال کرتے ہوئے سٹرنگ کے ایک نئی کاپی بناتے ہیں. 202 00:12:31,840 --> 00:12:34,220 ہم malloc کال کرنے کے لئے ایک اضافی 1 شامل 203 00:12:34,220 --> 00:12:37,810 \ 0 - تاکہ خصوصی شہوت انگیز null مختتم کردار کے لئے جگہ ہے 204 00:12:37,810 --> 00:12:41,990 جو ہم سٹرنگ پر شامل ہے ایک بار ہم حروف کے باقی حصوں میں کاپی کرنے کے، 205 00:12:41,990 --> 00:12:45,060 بجائے strcpy strncpy کا استعمال کرتے ہوئے 206 00:12:45,060 --> 00:12:48,830 تو ہم اس کی وضاحت ہم بالکل کتنے حروف کاپی کرنا چاہتا ہوں کر سکتے ہیں. 207 00:12:48,830 --> 00:12:51,690 Strcpy نقل کرتا ہے جب تک یہ ایک \ 0 مار دیتی ہے. 208 00:12:51,690 --> 00:12:55,740 اس وقت ہم اپنے کی بفر آزاد اور فون کرنے والے سے نقل واپس. 209 00:12:55,740 --> 00:12:59,840 >> کون جانتا تھا کہ اس طرح کی ایک تقریب سادہ دیکھنے رکھا جائے پیچیدہ کیا جا سکتا ہے؟ 210 00:12:59,840 --> 00:13:02,820 اب تمہیں معلوم ہے کہ CS50 لائبریری میں چلا جاتا ہے. 211 00:13:02,820 --> 00:13:06,470 >> میرا نام نیٹ Hardison ہے، اور اس CS50 ہے. 212 00:13:06,470 --> 00:13:08,350 [CS50.TV]