1 00:00:00,000 --> 00:00:02,730 [Powered by Google Translate] [5 دفعہ: کم آرام دہ اور پرسکون] 2 00:00:02,730 --> 00:00:05,180 [نیٹ Hardison، ہارورڈ یونیورسٹی] 3 00:00:05,180 --> 00:00:08,260 [یہ CS50 ہے.] [CS50.TV] 4 00:00:08,260 --> 00:00:11,690 تو خوش آمدید، لڑکوں. 5 00:00:11,690 --> 00:00:16,320 دفعہ 5 میں آپ کا استقبال ہے. 6 00:00:16,320 --> 00:00:20,220 اس وقت 0 کوئز مکمل اور دیکھا ہے کہ کس طرح تم نے کیا ہے، 7 00:00:20,220 --> 00:00:25,770 امید ہے کہ آپ واقعی اچھا لگ رہا ہے کیونکہ میں اس سیکشن میں سکور کی طرف سے بہت متاثر ہوئے ہیں. 8 00:00:25,770 --> 00:00:28,050 ہمارے آن لائن کے ناظرین کے لئے، ہم سوالات کے ایک جوڑے کی ہے 9 00:00:28,050 --> 00:00:33,680 مسئلہ سیٹ پر آخری دو مسائل کے بارے میں - یا کوئج، بلکہ. 10 00:00:33,680 --> 00:00:39,690 تو ہم ان سے زیادہ واقعی جلدی جانا جا رہے ہیں تا کہ ہر کوئی دیکھتا ہے کیا ہوا 11 00:00:39,690 --> 00:00:45,060 اور کس طرح بلکہ صرف حل خود دیکھنے سے اصل حل کے ذریعے جانے کے لئے. 12 00:00:45,060 --> 00:00:50,330 ہم واقعی مسائل کے آخری دو سے زیادہ تیزی سے جا رہے ہو، 32 اور 33. 13 00:00:50,330 --> 00:00:53,240 بس پھر، تو ہے کہ آن لائن ناظرین یہ دیکھ سکتے ہیں. 14 00:00:53,240 --> 00:00:59,080 >> اگر آپ کے میں اپنے 32 مسئلہ، جو 13 صفحے پر ہے کی طرف رجوع اورقرب اختیار، 15 00:00:59,080 --> 00:01:02,730 16 سے باہر 13، 32 مسئلہ تمام سویپ کے بارے میں ہے. 16 00:01:02,730 --> 00:01:05,010 یہ دو integers گماگمن کے بارے میں تھا. 17 00:01:05,010 --> 00:01:08,740 یہ مسئلہ یہ ہے کہ ہم درس میں وقت کے ایک جوڑے میں گیا تھا ہے. 18 00:01:08,740 --> 00:01:13,590 اور یہاں میں جو ہم نے تم سے کرنے کو کہہ رہے تھے ایک فوری میموری ٹریس ہے. 19 00:01:13,590 --> 00:01:17,000 متغیر کی اقدار میں بھر کے طور پر انہوں نے اسٹیک پر ہیں 20 00:01:17,000 --> 00:01:20,250 کوڈ اس سویپ تقریب کے ذریعے جاتا ہے. 21 00:01:20,250 --> 00:01:24,500 خاص طور پر، جو ہم دیکھ رہے ہیں - ہوں اس رکن نیچے ڈال جا - 22 00:01:24,500 --> 00:01:29,650 خاص طور پر، جو ہم دیکھ رہے ہیں وہ ہے اس لائن 6 حق یہاں کی تعداد ہے. 23 00:01:29,650 --> 00:01:36,740 اور یہ صرف پچھلے مسئلے سے contiguity کے لئے 6 گنا ہے. 24 00:01:36,740 --> 00:01:41,720 ہمیں کیا کرنا چاہتے ہیں یا لیبل میموری کی حالت کو ظاہر 25 00:01:41,720 --> 00:01:46,090 کے طور پر اس وقت ہے جب ہم نے یہ لائن نمبر 6 پھانسی، 26 00:01:46,090 --> 00:01:52,540 جو مؤثر طریقے سے ہمارے سویپ تقریب سے واپسی یہیں ہے. 27 00:01:52,540 --> 00:01:59,450 اگر ہم یہاں نیچے سکرال، ہم نے دیکھا کہ یاد میں سب کچھ کے پتے ہمارے لئے فراہم کی گئی تھی. 28 00:01:59,450 --> 00:02:02,540 یہ بہت اہم ہے، ہم صرف ایک لمحے میں اس پر واپس آ جائیں گے. 29 00:02:02,540 --> 00:02:09,240 اور پھر یہاں نیچے کے نیچے دیے گئے، ہم ایک چھوٹی سی میموری خاکہ تھا کہ ہم سے رجوع کرنے جا رہے ہیں. 30 00:02:09,240 --> 00:02:12,490 دراصل میں نے یہ کیا ہے میرے iPad پر باہر. 31 00:02:12,490 --> 00:02:20,720 تو میں صرف ریفرنس کے لئے رکن اور اس کوڈ کے درمیان آگے پیچھے متبادل جا رہا ہوں. 32 00:02:20,720 --> 00:02:26,540 >> چلو شروع کرتے ہیں. پہلے، اہم لائنز کی پہلی دو پر یہاں توجہ مرکوز ہے. 33 00:02:26,540 --> 00:02:30,220 شروع کرنے کے لئے، ہم نے 1 اور Y X 2 ابتدا جا رہے ہیں. 34 00:02:30,220 --> 00:02:33,040 تو ہم دو عددی متغیر ہے، وہ دونوں اسٹیک پر رکھ دیا گیا جا رہے ہیں. 35 00:02:33,040 --> 00:02:36,050 ہم ان میں 1 اور 2 رکھنے جا رہے ہیں. 36 00:02:36,050 --> 00:02:43,150 اگر ایسا ہے تو میں نے اپنے رکن پلٹائیں، امید ہے، دیکھتے ہیں - 37 00:02:43,150 --> 00:02:48,660 ایپل ٹی وی mirroring، اور ہم وہاں جا رہے ہیں. ٹھیک ہے. 38 00:02:48,660 --> 00:02:51,670 تو اگر میں اپنے رکن پلٹائیں، 39 00:02:51,670 --> 00:02:56,220 میں 1 اور Y X 2 ابتدا کرنا چاہتے ہیں. 40 00:02:56,220 --> 00:03:00,580 ہم اس X نشان لگا دیا گیا ہے کے خانے میں 1 لکھ کر بہت آسانی سے 41 00:03:00,580 --> 00:03:07,730 اور ایک باکس میں 2 Y نشان لگا دیا گیا ہے. کافی آسان ہے. 42 00:03:07,730 --> 00:03:11,620 تو اب لیپ ٹاپ پر واپس جانے کے لئے، ملاحظہ کریں اس کے بعد کیا ہوتا ہے. 43 00:03:11,620 --> 00:03:15,810 تو یہ اگلی لائن ہے جہاں کچھ مشکل حاصل ہے. 44 00:03:15,810 --> 00:03:28,110 ہم پیرامیٹرز کے طور پر X اور Y کے ایڈریس کا پتہ پاس اور سویپ تقریب B. 45 00:03:28,110 --> 00:03:32,380 X اور Y کے ایڈریس کا پتہ وہ چیزیں ہیں جو ہم نہیں حساب کر سکتے ہیں ہیں 46 00:03:32,380 --> 00:03:36,360 یہ گولی کا حوالہ دیتے بغیر یہاں ذیل دکھاتا ہے. 47 00:03:36,360 --> 00:03:39,750 اور خوش قسمتی سے، پہلے دو گولی پوائنٹس ہمیں بتائیں کہ بالکل کیا جوابات ہیں. 48 00:03:39,750 --> 00:03:44,740 یاد میں X کا پتہ 10 ہے، اور Y کی یاد میں پتہ 14 ہے. 49 00:03:44,740 --> 00:03:51,870 لہذا ان اقدار ہیں کہ میں منظور ہو جاتے ہیں اور ہمارے سویپ تقریب میں اوپر ب. 50 00:03:51,870 --> 00:04:00,760 تو پھر ہمارے آریھ واپس سوئچنگ، میں ایک میں 10 لکھ سکتے ہیں 51 00:04:00,760 --> 00:04:07,400 اور بی میں 14. 52 00:04:07,400 --> 00:04:11,610 اب، اس نقطہ ہے جہاں ہم سویپ کے ساتھ آگے بڑھنے. 53 00:04:11,610 --> 00:04:14,520 تو لیپ ٹاپ دوبارہ flipping 54 00:04:14,520 --> 00:04:21,079 ہم دیکھتے ہیں کہ سویپ کام میں پہلے dereference ایک اور دکان tmp نتیجہ ہے. 55 00:04:21,079 --> 00:04:27,650 تو dereference آپریٹر کا کہنا ہے کہ، "ارے ایک پتے کے طور پر ایک متغیر کی کے علاج کے. 56 00:04:27,650 --> 00:04:33,830 جو کچھ بھی اس پتے پر محفوظ کیا جاتا ہے دیکھیں، اور لوڈ. " 57 00:04:33,830 --> 00:04:41,720 کیا تمہیں متغیر کی لوڈ، ہماری tmp متغیر میں محفوظ کیا جا رہا ہے. 58 00:04:41,720 --> 00:04:45,150 رکن واپس Flipping. 59 00:04:45,150 --> 00:04:51,690 اگر ہم 10 کو حل کرنے جاتے ہیں، ہم جانتے ہیں کہ 10 varible X پتہ ہے 60 00:04:51,690 --> 00:04:55,480 کیونکہ ہم ہمارے گولی نقطہ ہے کہ یاد میں X کا پتہ 10 کی طرف سے کہا گیا تھا. 61 00:04:55,480 --> 00:05:00,180 تو ہم وہاں جاتے ہیں، اس کی قدر، جو 1 ہے حاصل، کے طور پر ہم اپنے رکن پر دیکھ سکتے ہیں، 62 00:05:00,180 --> 00:05:06,300 اور یہ کہ tmp میں لوڈ. 63 00:05:06,300 --> 00:05:08,250 ایک بار پھر، یہ آخری مواد نہیں ہے. 64 00:05:08,250 --> 00:05:14,350 ہم اس کے ذریعے چلنے کے لئے جا رہے ہیں اور ہم آخر میں ہمارے پروگرام کے فائنل میں ریاست میں لے کر آتی ہوں. 65 00:05:14,350 --> 00:05:17,210 لیکن اب، ہم نے 1 قدر tmp میں محفوظ ہے. 66 00:05:17,210 --> 00:05:19,210 >> اور یہاں پر ایک فوری سوال ہے. 67 00:05:19,210 --> 00:05:23,980 [الیگزینڈر] dereference آپریٹر ہے - جو متغیر کے سامنے میں ستارہ ٹھیک ہے؟ 68 00:05:23,980 --> 00:05:27,600 >> جی ہاں. dereference آپریٹر تو، جیسا کہ ہم اپنے لیپ ٹاپ واپس ایک بار پھر پلٹائیں 69 00:05:27,600 --> 00:05:33,780 سامنے حق یہ ستارہ ہے. 70 00:05:33,780 --> 00:05:37,460 اس لحاظ سے، یہ ہے - آپ اسے ضرب آپریٹر کے ساتھ اس کے برعکس 71 00:05:37,460 --> 00:05:42,400 جس میں دو چیزوں کی ضرورت ہوتی ہے، dereference آپریٹر یک رکنی آپریٹر ہے. 72 00:05:42,400 --> 00:05:46,130 بس ایک قیمت کا اطلاق کے طور پر ایک بائنری آپریٹر کی مخالفت، 73 00:05:46,130 --> 00:05:48,810 آپ دو مختلف اقدار جہاں لاگو ہوتے ہیں. 74 00:05:48,810 --> 00:05:52,080 جس سے کہ اس لائن میں کیا ہوتا ہے. 75 00:05:52,080 --> 00:05:58,390 ہم 1 قدر بھاری اور ہماری عارضی عددی متغیر میں محفوظ ہے. 76 00:05:58,390 --> 00:06:05,800 اگلی لائن، ہم میں ب کے مندرجات ذخیرہ - 77 00:06:05,800 --> 00:06:12,630 یا، بلکہ، ہم مواد ہے کہ ب وہ جگہ ہے جہاں ایک اشارہ کر رہا ہے میں اشارہ کر رہا ہے سٹور. 78 00:06:12,630 --> 00:06:17,690 اگر ہم نے دائیں سے بائیں سے اس کا تجزیہ، ہم dereference بی جا رہے ہیں، 79 00:06:17,690 --> 00:06:23,580 ہم 14 کو حل کرنے جا رہے ہیں، ہم عددی ہے جو وہاں ہے پر قبضہ کرنے جا رہے ہیں، 80 00:06:23,580 --> 00:06:26,900 اور پھر ہم 10 ایڈریس پر جانے کے لئے جا رہے ہیں، 81 00:06:26,900 --> 00:06:34,240 اور ہم اس خلا میں ب ہمارے dereference کے نتیجہ پر پھینک جا رہے ہیں. 82 00:06:34,240 --> 00:06:40,080 ، ہمارے رکن، جہاں ہم یہ تھوڑا زیادہ ٹھوس کر سکتے ہیں کرنے کے لئے واپس Flipping 83 00:06:40,080 --> 00:06:44,070 یہ اگر میں پتوں کی سب پر نمبر یہاں لکھ دیں میں مدد کر سکتے ہیں. 84 00:06:44,070 --> 00:06:53,820 X تو ہم جانتے ہیں کہ Y، ہم 14 ایڈریس پر ہیں، 10 ایڈریس پر ہے. 85 00:06:53,820 --> 00:07:00,180 جب ہم ب سے شروع، ہم dereference ب، ہم 2 قیمت پر قبضہ کرنے جا رہے ہیں. 86 00:07:00,180 --> 00:07:08,320 ہم اس کی قیمت کی وجہ سے اس قدر ہے کہ 14 ایڈریس پر رہتا ہے پر قبضہ کرنے کے لئے جا رہے ہیں. 87 00:07:08,320 --> 00:07:15,700 اور ہم متغیر ہے کہ 10 ایڈریس پر رہتے ہیں میں ڈالنے جا رہے ہیں، 88 00:07:15,700 --> 00:07:19,160 جو وہاں ہے ہمارے متغیر x کے مطابق ہے. 89 00:07:19,160 --> 00:07:21,810 تو ہم یہاں overwriting تھوڑا سا کر سکتے ہیں 90 00:07:21,810 --> 00:07:35,380 ہم ہمارے 1 نجات کہاں ملتا ہے اور اس کے بجائے ہم 2 لکھ. 91 00:07:35,380 --> 00:07:39,560 تو سب کچھ ٹھیک ہے اور دنیا میں اچھا ہے، اگرچہ اب ہم ادلیکھت ایکس ہے. 92 00:07:39,560 --> 00:07:44,890 ہم X ہمارے tmp متغیر میں پرانے قیمت ذخیرہ ہے. 93 00:07:44,890 --> 00:07:50,210 تو ہم اگلی لائن کے ساتھ سویپ مکمل کر سکتے ہیں. 94 00:07:50,210 --> 00:07:53,030 ہمارے لیپ ٹاپ واپس Flipping. 95 00:07:53,030 --> 00:07:58,150 اب وہ سب باقیات مواد ہماری عارضی عددی متغیر سے باہر لے جانا ہے 96 00:07:58,150 --> 00:08:05,630 اور ان متغیر جو پتہ ہے کہ ب کر رہا ہے میں رہتا ہے میں سٹور. 97 00:08:05,630 --> 00:08:10,230 تو ہم نے مؤثر طریقے سے dereference ب متغیر تک رسائی حاصل کرنے کے لئے جا رہے ہیں 98 00:08:10,230 --> 00:08:14,340 جو پتہ ہے کہ ب اس میں ڈگری حاصل کی ہے، 99 00:08:14,340 --> 00:08:19,190 اور ہم قدر ہے کہ tmp اس میں روک رہی ہے سامان کے لئے جا رہے ہیں. 100 00:08:19,190 --> 00:08:23,280 رکن واپس ایک بار Flipping ہے. 101 00:08:23,280 --> 00:08:31,290 میں نے اس قیمت کو یہاں مٹانے، 2 کر سکتے ہیں، 102 00:08:31,290 --> 00:08:41,010 اور اس کے بجائے ہم اس میں 1 حق کاپی کریں گے. 103 00:08:41,010 --> 00:08:43,059 اس کے بعد کورس کے اگلی لائن ہے جو executes - 104 00:08:43,059 --> 00:08:47,150 اگر ہم لیپ ٹاپ واپس پلٹائیں - اس نقطہ 6 ہے، 105 00:08:47,150 --> 00:08:52,500 جو نقطہ ہے جس میں ہم ہمارے آریھ مکمل طور پر بھرے چاہتا تھا. 106 00:08:52,500 --> 00:08:58,940 تو رکن واپس flipping ایک بار، صرف اس لئے آپ کو مکمل خاکہ دیکھ سکتے ہیں، 107 00:08:58,940 --> 00:09:06,610 آپ دیکھیں گے کہ ہم میں 10، ب میں 14، ایک tmp میں 1، 2 X میں، اور ایک Y 1 کر سکتے ہیں. 108 00:09:06,610 --> 00:09:11,000 ہیں اس کے بارے میں کوئی سوال ہے؟ 109 00:09:11,000 --> 00:09:14,640 کیا اس کا کوئی مطلب، اس کے ذریعے چلا گیا ہے؟ 110 00:09:14,640 --> 00:09:24,850 کم سمجھ ہے؟ امید نہیں ہے. ٹھیک ہے. 111 00:09:24,850 --> 00:09:28,230 >> نوٹیفائر بہت مشکل موضوع ہے. 112 00:09:28,230 --> 00:09:33,420 لوگ ہم ساتھ مل کر کام ایک بہت عام کہاوت ہے: 113 00:09:33,420 --> 00:09:36,590 "اشارہ سمجھنے کے لئے، آپ کو اشارہ سب سے پہلے سمجھنا چاہیے." 114 00:09:36,590 --> 00:09:40,530 جو مجھے لگتا ہے کہ بہت سچ ہے. یہ ایک اس کی عادت کے لئے کچھ وقت لگ کرتا ہے. 115 00:09:40,530 --> 00:09:45,360 تصویریں قرعہ اندازی، ایک اس طرح میموری diagrams کی قرعہ اندازی بہت مدد مل رہی ہے، 116 00:09:45,360 --> 00:09:49,480 اور اس کے بعد آپ کو مثال کے طور پر کے بعد مثال کے طور پر کے بعد مثال کے طور پر کے ذریعے چل، 117 00:09:49,480 --> 00:09:54,450 یہ تھوڑا زیادہ جذبات اور تھوڑا اور احساس اور ایک چھوٹا سا احساس بنانے کے لئے شروع کر دیں گے. 118 00:09:54,450 --> 00:10:01,560 آخر میں، ایک دن آپ ہے، یہ سب پوری طرح سے مہارت حاصل کریں گے. 119 00:10:01,560 --> 00:10:13,800 سے کوئی بھی سوال پہلے ہم اگلے مسئلہ پر منتقل؟ ٹھیک ہے. 120 00:10:13,800 --> 00:10:18,840 تو لیپ ٹاپ واپس پلٹائیں. 121 00:10:18,840 --> 00:10:23,300 اگلی مسئلہ ہم نے مسئلہ 33 نمبر فائل پر ہے I / O. 122 00:10:23,300 --> 00:10:26,350 یہ ایک تھوڑا سا میں زوم. 123 00:10:26,350 --> 00:10:28,710 33 مسئلہ - جی ہاں؟ 124 00:10:28,710 --> 00:10:32,110 >> [ڈینیل] میں صرف ایک فوری سوال تھا. یہ ستارہ یا ستارے، 125 00:10:32,110 --> 00:10:35,590 جب آپ کو ایک ستارے پہلے استعمال کرتے ہیں محولہ لقب ضبطی کہا جاتا ہے. 126 00:10:35,590 --> 00:10:38,820 یہ کیا ہے جب تم سے پہلے ایمپرسینڈ استعمال کرتے بلایا تھا؟ 127 00:10:38,820 --> 00:10:43,140 >> ایمپرسینڈ پہلے آپریٹر کا پتہ ہے. 128 00:10:43,140 --> 00:10:45,880 تو بیک اپ سکرال. 129 00:10:45,880 --> 00:10:49,310 افوہ. میں تو میں نے سچ میں کتاب نہیں کر سکتا زوم موڈ میں ہوں. 130 00:10:49,310 --> 00:10:52,780 اگر ہم واقعی اس کوڈ میں فوری طور پر نظر آتے ہیں یہاں، 131 00:10:52,780 --> 00:10:54,980 پھر ایک ہی بات پر ہو رہا ہے. 132 00:10:54,980 --> 00:10:59,180 اگر ہم اس کوڈ میں دیکھتے ہیں یہاں، اس لائن پر جہاں ہم کال تبادلہ کرتے ہیں تو، 133 00:10:59,180 --> 00:11:10,460 ایمپرسینڈ صرف کہہ رہا ہے "پتہ جس میں متغیر x زندگی حاصل ہے." 134 00:11:10,460 --> 00:11:14,460 جب آپ سنکلک اپنے کوڈ کو آگاہ کریں، 135 00:11:14,460 --> 00:11:20,590 یہ اصل میں جسمانی طور پر رہنے کے متغیرات میں سے سب کے لئے یاد میں ایک جگہ کو نشان زد کر ہے. 136 00:11:20,590 --> 00:11:24,910 اور تو کیا سنکلک میں ایک بار یہ سب کچھ مرتب کیا ہے، تو کر سکتے ہیں، 137 00:11:24,910 --> 00:11:31,110 اسے جانتا ہے، "اوہ، میں 10 ایڈریس پر ایکس ڈال میں 14 ایڈریس پر Y ڈال." 138 00:11:31,110 --> 00:11:34,640 تو یہ آپ کے لئے ان اقدار میں بھر سکتا ہے. 139 00:11:34,640 --> 00:11:44,740 تو پھر تم کر سکتے ہیں - اس کے ساتھ ساتھ پاس اور Y سکتا ہے تو اس کے پاس ہے. 140 00:11:44,740 --> 00:11:50,730 یہ لوگ کو پتہ مل، لیکن وہ بھی، جب آپ انہیں سویپ تقریب میں گزر، 141 00:11:50,730 --> 00:11:55,690 اس قسم کی معلومات، اس int یہیں * سنکلک بتاتی ہے، 142 00:11:55,690 --> 00:12:01,350 "ٹھیک ہے، ہم ایک عددی متغیر کی ایک پتے کے طور پر اس ایڈریس پر ترجمانی جا رہے ہیں." 143 00:12:01,350 --> 00:12:05,900 ایک int کے پتے کے طور پر، جس میں ایک کردار متغیر کے ایڈریس سے مختلف ہے 144 00:12:05,900 --> 00:12:09,930 کیونکہ ایک int 32 بٹ ایک مشین پر لیتا ہے، جگہ کی 4 بائٹس لیتا ہے، 145 00:12:09,930 --> 00:12:13,310 جبکہ ایک کردار صرف جگہ کی 1 بائٹ لیتا ہے. 146 00:12:13,310 --> 00:12:17,310 تو یہ بھی پتہ ہے کیا ہے اہم ہے - کیا رہتا ہے، کس قسم کی قیمت کے 147 00:12:17,310 --> 00:12:20,340 پتہ ہے جو اندر منظور گیا میں رہنے 148 00:12:20,340 --> 00:12:22,020 یا ایڈریس ہے کہ آپ کے ساتھ کام کر رہے ہیں. 149 00:12:22,020 --> 00:12:29,020 اس طرح، آپ کو کتنی معلومات کی شراکت دراصل آپ کے RAM کے باہر لوڈ جانتے ہیں. 150 00:12:29,020 --> 00:12:31,780 اور پھر، جی ہاں، آپ کی طرح اس dereference آپریٹر، پوچھ رہے تھے، 151 00:12:31,780 --> 00:12:37,200 جاتا ہے اور ایک مخصوص ایڈریس پر معلومات تک رسائی حاصل ہے. 152 00:12:37,200 --> 00:12:42,820 ، تو یہ ایک متغیر کے ساتھ کہتے ہیں کہ، یہاں، پتہ کے طور پر ایک کے مندرجات کے علاج کے 153 00:12:42,820 --> 00:12:47,880 اس ایڈریس پر جانے اور باہر ھیںچو، ایک رجسٹر میں پروسیسر، لوڈ میں لوڈ 154 00:12:47,880 --> 00:12:56,340 اصل اقدار یا مواد جو اس ایڈریس پر رہتے ہیں. 155 00:12:56,340 --> 00:12:59,620 مزید کوئی سوال؟ یہ اچھے سوالات ہیں. 156 00:12:59,620 --> 00:13:01,650 یہ نئی اصطلاحات کا ایک بھی بہت ہے. 157 00:13:01,650 --> 00:13:09,800 یہ بھی funky کی طرح ہے، مختلف مقامات پر دیکھ اور *. 158 00:13:09,800 --> 00:13:13,180 >> ٹھیک ہے. 159 00:13:13,180 --> 00:13:18,530 تو واپس 33 مسئلہ فائل، I / O. 160 00:13:18,530 --> 00:13:22,540 یہ ان مسائل کہ مجھے لگتا ہے کے ایک جوڑے کی چیزیں ہوا میں سے ایک تھا. 161 00:13:22,540 --> 00:13:25,400 ایک، یہ ایک کافی نیا موضوع ہے. 162 00:13:25,400 --> 00:13:30,590 یہ کوئز سے پہلے بہت جلد پیش کیا گیا ہے، 163 00:13:30,590 --> 00:13:33,400 اور اس کے بعد مجھے لگتا ہے کہ یہ ریاضی میں لفظ کے ان مسائل میں سے ایک کی طرح قسم کی تھی 164 00:13:33,400 --> 00:13:39,720 جہاں وہ آپ کی معلومات کی ایک بہت کچھ دے، لیکن آپ نے واقعی ختم نہیں کرتے اس کے ایک ٹن کو استعمال کرنے کے لئے. 165 00:13:39,720 --> 00:13:44,060 اس مسئلے کے پہلے حصہ کا ذکر ہے جو ایک CSV فائل ہے. 166 00:13:44,060 --> 00:13:50,620 اب، ایک CSV فائل، تفصیل کے مطابق، ایک کوما سے الگ کردہ اقدار فائل ہے. 167 00:13:50,620 --> 00:13:55,300 وجہ یہ تمام دلچسپ ہے، اور اس کی وجہ سے تم نے کبھی ان کا استعمال، 168 00:13:55,300 --> 00:14:00,800 ہے، کیونکہ تم میں سے کتنے بھی ایکسل جیسی چیزیں استعمال کیا ہے؟ 169 00:14:00,800 --> 00:14:03,240 تم میں سے زیادہ تر کے اعداد و شمار ہے، شاید آپ کی زندگی میں کسی نہ کسی موڑ پر استعمال کرتے ہیں، یا گا. 170 00:14:03,240 --> 00:14:06,430 آپ ایکسل کی طرح کے کچھ کا استعمال کریں گے. 171 00:14:06,430 --> 00:14:10,940 ، کے لئے ایک ایکسل سپریڈ شیٹ کی ڈیٹا باہر نکل یا اس کے ساتھ کسی بھی قسم کی پروسیسنگ کے کرنا 172 00:14:10,940 --> 00:14:17,240 اگر آپ C پروگرام یا ازگر پروگرام جاوا پروگرام لکھنا چاہتے تھے، 173 00:14:17,240 --> 00:14:20,070 ڈیٹا تمہیں وہاں میں جمع کیا ہے کے ساتھ نمٹنے کے، 174 00:14:20,070 --> 00:14:23,170 اسے باہر حاصل کرنے کے لئے سب سے زیادہ عام طریقوں میں سے ایک ایک CSV فائل میں ہے. 175 00:14:23,170 --> 00:14:26,850 اور تم ایکسل کھولنے اور جب آپ کو بات چیت 'کے طور پر محفوظ کریں' کر سکتے ہیں، 176 00:14:26,850 --> 00:14:32,840 آپ کو ایک حقیقی CSV فائل حاصل کر سکتے ہیں. 177 00:14:32,840 --> 00:14:35,890 >> معلوم ہے کہ کس طرح ان چیزوں کے ساتھ نمٹنے کے لئے آسان ہے. 178 00:14:35,890 --> 00:14:42,010 جس طرح یہ کام کرتا ہے یہ ہے کہ یہ اسی طرح کی ہے - میرا مطلب ہے، یہ بنیادی طور پر ایک سپریڈ شیٹ mimicking ہے، 179 00:14:42,010 --> 00:14:47,590 جہاں، جیسا کہ ہم یہاں دیکھتے ہیں بہت چھوڑ سب سے زیادہ ٹکڑا میں، 180 00:14:47,590 --> 00:14:49,910 ہم سب کو آخری نام ہے. 181 00:14:49,910 --> 00:14:54,670 تو ہم Malan، تو Hardison، اور پھر Bowden، MacWilliam، اور پھر چان ہے. 182 00:14:54,670 --> 00:14:59,470 تمام آخری نام. اور پھر پہلے ناموں سے کوما آخری نام الگ کرتی ہے. 183 00:14:59,470 --> 00:15:02,970 ڈیوڈ، نیٹ، روب، ٹامی، اور Zamyla. 184 00:15:02,970 --> 00:15:06,850 میں ہمیشہ رابی اور ٹام ملا. 185 00:15:06,850 --> 00:15:10,940 اور پھر آخر میں، تیسرے کالم میں ای میل ایڈریس ہے. 186 00:15:10,940 --> 00:15:18,500 ایک بار جب آپ یہ سمجھ رہے ہیں، باقی پروگرام کا عدل کو نافذ کرنے کا براہ راست ہے. 187 00:15:18,500 --> 00:15:23,850 کیا ہم تاکہ ہماری C پروگرام میں اس ایک ہی ساخت پر نقل کیا ہے 188 00:15:23,850 --> 00:15:27,510 ہے ہم نے ایک ڈھانچہ استعمال کیا جاتا ہے. 189 00:15:27,510 --> 00:15:30,520 ہم ان تھوڑا ساتھ ساتھ کے ساتھ کھیلنے کا آغاز کریں گے. 190 00:15:30,520 --> 00:15:35,790 ہم نے انہیں مسئلہ 3 سیٹ، جب ہم لغات سے نمٹنے کر رہے تھے میں پہلے تھوڑا سا دیکھا. 191 00:15:35,790 --> 00:15:40,290 لیکن اس کے عملے struct آخری نام، پہلا نام، اور ایک ای میل کے ذخیرہ. 192 00:15:40,290 --> 00:15:44,500 ہمارے CSV فائل کی طرح صرف ذخیرہ کیے ہوئے ہے. 193 00:15:44,500 --> 00:15:47,950 تو یہ صرف ایک شکل سے دوسرے میں تبدیل ہے. 194 00:15:47,950 --> 00:15:54,630 ہم اس معاملے میں، ایک سطر میں عملے کے struct تبدیل ہے، 195 00:15:54,630 --> 00:15:59,060 ایسے ہی ایک کوما سے الگ لائن،. 196 00:15:59,060 --> 00:16:01,500 کیا اس کا کوئی مطلب ہے؟ تم لوگوں نے سب کو گئے تمام سوالات کے لے لیا ہے، 197 00:16:01,500 --> 00:16:07,680 تو میں سوچ آپ کو کم از کم کچھ اس کے بارے میں سوچنے کا وقت تھا. 198 00:16:07,680 --> 00:16:16,410 >> باڑے کی تقریب میں، مسئلہ ہم میں لینے کے لئے پوچھتا ہے - یہ ایک تھوڑا سا میں we'll زوم - 199 00:16:16,410 --> 00:16:22,480 عملے کی ساخت، عملے struct کے نام کے ساتھ لے، 200 00:16:22,480 --> 00:16:30,900 اور ہمارے staff.csv فائل کے مواد کو شامل ہے. 201 00:16:30,900 --> 00:16:34,230 یہ پتہ چلا ہے کہ یہ منصفانہ استعمال کرنے کے لئے براہ راست ہے. 202 00:16:34,230 --> 00:16:37,430 ہم یہ تھوڑا سا کام کرتا ہے آج کے ارد گرد کی قسم ادا کریں گے. 203 00:16:37,430 --> 00:16:44,510 لیکن اس معاملے میں، fprintf تقریب واقعی اہم ہے. 204 00:16:44,510 --> 00:16:51,960 تو، ہم fprintf کے ساتھ پرنٹ، جیسا کہ لوگ آپ کو اس پوری مدت printf کا استعمال کرتے ہوئے کر سکتے ہیں. 205 00:16:51,960 --> 00:16:55,050 آپ printf ایک فائل میں لائن کر سکتے ہیں. 206 00:16:55,050 --> 00:16:59,030 تو کیا تم صرف معمول printf کال کرنے کے بجائے جہاں اس کی شکل سٹرنگ دے 207 00:16:59,030 --> 00:17:05,380 اور اس کے بعد آپ مندرجہ ذیل دلائل کے ساتھ تمام متغیر کی جگہ لے لیں، 208 00:17:05,380 --> 00:17:11,290 fprintf کے ساتھ، آپ کا بہت پہلے دلیل کی بجائے فائل سے آپ کو لکھنے کے لئے کرنا چاہتے ہیں ہے. 209 00:17:11,290 --> 00:17:21,170 اگر ہم مثال کے طور پر آلات میں اس کو دیکھو، fprintf آدمی تھے، 210 00:17:21,170 --> 00:17:25,980 ہم printf اور fprintf کے درمیان فرق دیکھ سکتے ہیں. 211 00:17:25,980 --> 00:17:28,960 میں یہاں میں تھوڑا سا زوم کریں گے. 212 00:17:28,960 --> 00:17:33,140 تو، ہم printf کے ساتھ یہ ایک فارمیٹ سٹرنگ دے، اور پھر بعد میں دلائل 213 00:17:33,140 --> 00:17:37,580 ہماری شکل سٹرنگ میں تبدیلی یا متبادل کے لئے تمام متغیر ہیں. 214 00:17:37,580 --> 00:17:47,310 fprintf کے ساتھ جبکہ سب سے پہلے دلیل واقعی اس فائل کہا جاتا ندی * ہے. 215 00:17:47,310 --> 00:17:51,800 >> یہاں ہمارے کرایہ پر واپس منتقل 216 00:17:51,800 --> 00:17:54,550 ہم نے پہلے سے ہی نے ہماری فائل * ندی ہمارے لئے کھول دیا ہے. 217 00:17:54,550 --> 00:17:57,810 یہ ہے کہ اس کی پہلی سطر ہے، یہ staff.csv فائل کو کھولتا ہے، 218 00:17:57,810 --> 00:18:01,690 یہ شامل موڈ میں کھلتا ہے، اور ہے کہ ہمارے لئے کیا بچا ہے ہے 219 00:18:01,690 --> 00:18:08,640 عملے فائل کی ساخت لکھیں. 220 00:18:08,640 --> 00:18:10,870 اور، دیکھتے، میں آئی پیڈ کو استعمال کرنے کے لئے چاہتے ہیں؟ 221 00:18:10,870 --> 00:18:17,900 میں آئی پیڈ کو استعمال کریں گے. ہم باطل ہے - میز پر یہ تو میں تھوڑا بہتر لکھ سکتے ہیں ڈال دو - 222 00:18:17,900 --> 00:18:33,680 کرایہ پر باطل ہے اور یہ ایک بحث میں لیتا ہے، عملے سے ملاقات کی کی ساخت ہے. 223 00:18:33,680 --> 00:18:44,120 ہماری منحنی خطوط وحدانی ہے، ہم اپنی فائل کہا جاتا فائل * ہے، 224 00:18:44,120 --> 00:18:48,380 ہم اپنے fopen ہمیں دی گئی لائن ہے 225 00:18:48,380 --> 00:18:51,890 اور میں یہ نقطہ کے طور پر صرف لکھنے کے بعد یہ pedia میں پہلے سے ہی کریں گے. 226 00:18:51,890 --> 00:19:00,530 اور پھر ہماری اگلی لائن پر ہم fprintf کو ایک فون کرنا جا رہے ہیں 227 00:19:00,530 --> 00:19:03,700 اور ہم فائل میں منتقل کرنے کی جا رہی ہے کہ ہم کو پرنٹ کرنے کے لئے چاہتے ہیں کر رہے ہیں، 228 00:19:03,700 --> 00:19:10,290 اور پھر ہماری شکل سٹرنگ، جس میں - 229 00:19:10,290 --> 00:19:14,300 میں تم لوگ مجھے بتاو کہ یہ کیا طرح لگتا ہے گے. 230 00:19:14,300 --> 00:19:20,500 آپ کے بارے میں، کیسے سٹیلا؟ کیا آپ کو معلوم ہے کہ کیا شکل سٹرنگ کے پہلے حصہ کی طرح لگتا ہے؟ 231 00:19:20,500 --> 00:19:24,270 [سٹیلا] مجھے یقین نہیں ہے. >> جمی پوچھنا بلا جھجھک. 232 00:19:24,270 --> 00:19:27,690 کیا آپ جمی کو جانتے ہو؟ 233 00:19:27,690 --> 00:19:31,000 [جمی] صرف یہ آخری ہوگا؟ مجھے پتہ نہیں ہے. میں مکمل طور پر اس بات کا یقین نہیں ہوں. 234 00:19:31,000 --> 00:19:39,020 ٹھیک ہے. >> کے بارے میں کیسے، کوئی امتحان کیا یہ صحیح ملا؟ 235 00:19:39,020 --> 00:19:41,770 نہیں ٹھیک ہے. 236 00:19:41,770 --> 00:19:47,920 یہ پتہ چلا ہے کہ یہاں ہمیں کیا کرنا ہے ہے ہم نے ہمارے عملے کی ساخت میں سے ہر ایک حصہ کی ضرورت ہے 237 00:19:47,920 --> 00:19:53,290 ہماری فائل میں ایک تار کے طور پر باہر طباعت کی جائے. 238 00:19:53,290 --> 00:19:59,900 ہم صرف سٹرنگ متبادل کردار تین مختلف اوقات کا استعمال کریں کیونکہ ہم ایک آخری نام ہے 239 00:19:59,900 --> 00:20:07,160 کوما کے بعد، تو پہلا نام کوما کے بعد، 240 00:20:07,160 --> 00:20:12,430 اور پھر آخر میں ای میل ایڈریس جس کے بعد ہے - جو نہیں ہے 241 00:20:12,430 --> 00:20:15,140 اپنی سکرین پر فٹنگ کا - لیکن یہ ایک newline کردار کے بعد ہے. 242 00:20:15,140 --> 00:20:20,060 لہذا میں نے یہ صرف وہاں لکھنے جا رہا ہوں. 243 00:20:20,060 --> 00:20:23,560 اور پھر ہماری شکل سٹرنگ کے بعد، 244 00:20:23,560 --> 00:20:27,880 ہم صرف substitutions ہے، جو ہم ڈاٹ سنکیتن کا استعمال کرتے ہوئے تک رسائی 245 00:20:27,880 --> 00:20:31,370 ہے کہ ہم نے مسئلہ 3 سیٹ میں دیکھا ہے. 246 00:20:31,370 --> 00:20:48,820 ہم s.last، s.first، اور s.email کا استعمال کر سکتے ہیں 247 00:20:48,820 --> 00:20:58,990 ہماری شکل سٹرنگ میں ان تین اقدار میں متبادل. 248 00:20:58,990 --> 00:21:06,190 تو وہ کیسے؟ احساس ہے؟ 249 00:21:06,190 --> 00:21:09,700 جی ہاں؟ نہیں؟ شاید؟ ٹھیک ہے. 250 00:21:09,700 --> 00:21:14,180 >> آخری بات یہ ہے کہ ہم یہ کرتے ہیں کے بعد ہم طباعت اور اس کے بعد ہم نے ہماری فائل کو کھول دیا ہے: 251 00:21:14,180 --> 00:21:17,370 جب بھی ہم نے ایک فائل کھولی ہے، ہم ہمیشہ اسے بند یاد ہے. 252 00:21:17,370 --> 00:21:19,430 کیونکہ دوسری صورت میں ہم ختم میموری لیک کر رہا ہوں، 253 00:21:19,430 --> 00:21:22,500 فائل descriptors کا استعمال کرتے ہوئے. 254 00:21:22,500 --> 00:21:25,950 تو اس کو بند کرنے کے لئے ہم جو فنکشن استعمال کرتے ہیں؟ ڈینیل؟ 255 00:21:25,950 --> 00:21:30,120 [ڈینیل] fclose؟ >> fclose، بالکل. 256 00:21:30,120 --> 00:21:37,520 تو اس مسئلہ کے آخری حصہ مناسب طریقے سے فائل قریب تھا، fclose فنکشن کا استعمال کرتے ہوئے، 257 00:21:37,520 --> 00:21:40,370 جس میں صرف اس طرح لگ رہا ہے. 258 00:21:40,370 --> 00:21:43,880 بھی پاگل نہیں. 259 00:21:43,880 --> 00:21:46,990 ڈاؤن لوڈ، اتارنا. 260 00:21:46,990 --> 00:21:49,520 تو یہ گئے تمام سوالات پر 33 مسئلہ ہے. 261 00:21:49,520 --> 00:21:52,480 ہم یقینی طور پر زیادہ فائل I / O آ پڑے گا. 262 00:21:52,480 --> 00:21:55,130 آج ہم درس میں تھوڑا سا زیادہ حصے میں کریں گے، یا آج 263 00:21:55,130 --> 00:22:01,710 اس لیے کہ وہ کیا اس آئندہ pset کا بڑا حصہ بنانے جا رہا ہے. 264 00:22:01,710 --> 00:22:05,020 چلو اس وقت کوئز سے منتقل. جی ہاں؟ 265 00:22:05,020 --> 00:22:10,880 >> [شارلٹ]] fclose کی بجائے کیوں fclose (فائل) (staff.csv) ہیں؟ 266 00:22:10,880 --> 00:22:19,100 >> آہ. کیونکہ یہ پتہ چلتا ہے کہ - تو سوال، جو ایک عظیم ہے، 267 00:22:19,100 --> 00:22:27,800 کیوں ہے، جب ہم fclose لکھنے، ہم fclose (فائل) ستارہ متغیر لکھ رہے ہیں 268 00:22:27,800 --> 00:22:33,680 فائل کا نام، staff.csv کے خلاف ہے؟ کیا یہ صحیح ہے؟ جی ہاں. 269 00:22:33,680 --> 00:22:39,570 تو چلو ایک نظر ڈالیں. اگر میں نے اپنے لیپ ٹاپ میں واپس سوئچ، 270 00:22:39,570 --> 00:22:45,040 اور fclose فنکشن کو دیکھو. 271 00:22:45,040 --> 00:22:51,460 تو fclose تقریب ندی بند کر دیتا ہے اور پوائنٹر میں ندی کہ ہم بند کرنا چاہتے ہیں پر لے جاتا ہے ہے، 272 00:22:51,460 --> 00:22:57,010 کے طور پر اصل فائل کے نام کہ ہم کو بند کرنا چاہتے ہیں کے خلاف ہے. 273 00:22:57,010 --> 00:23:01,620 اور یہ کیونکہ پردے کے پیچھے، جب آپ fopen کے ایک فون کر 274 00:23:01,620 --> 00:23:12,020 جب آپ کو ایک فائل کو کھولنے کے، آپ اصل میں میموری آونٹن کر رہے ہیں فائل کے بارے میں معلومات جمع کرنے. 275 00:23:12,020 --> 00:23:16,380 تو آپ کو فائل پوائنٹر ہے کہ فائل کے بارے میں معلومات ہے، 276 00:23:16,380 --> 00:23:23,080 ، جیسا کہ یہ کھلا ہے، اس کے سائز، جہاں آپ کو فائل میں ہیں 277 00:23:23,080 --> 00:23:29,100 تم ایسا کر سکتے ہیں فائل کے اندر اندر اس مخصوص جگہ پر کالیں لکھنے پڑھنے اور. 278 00:23:29,100 --> 00:23:38,060 آپ کو ختم فائل کا نام بند کرنے کے بجائے پوائنٹر بند ہے. 279 00:23:38,060 --> 00:23:48,990 >> جی ہاں؟ [ڈینیل] کے لئے کرایہ پر استعمال کرنے کے لئے، آپ کہیں گے - یہ کس طرح صارف کی ان پٹ حاصل ہے؟ 280 00:23:48,990 --> 00:23:53,830 کیا GetString طرح fprintf احساس میں کام ہے کہ وہ صارف کی ان پٹ کے لئے انتظار کریں گے 281 00:23:53,830 --> 00:23:57,180 اور تم اس قسم کا مطالبہ - یا آپ کے لئے میں ان تین چیزوں ٹائپ کرنے کا انتظار ہے؟ 282 00:23:57,180 --> 00:24:00,480 یا تم سے کچھ کرایہ پر لاگو کرنے کے لئے استعمال کرنے کی ضرورت ہے؟ 283 00:24:00,480 --> 00:24:04,100 >> جی ہاں. تو ہم نہیں ہیں - سوال ہے، کس طرح تھا کہ ہم صارف کی ان پٹ 284 00:24:04,100 --> 00:24:09,220 کے لئے کرایہ پر لاگو کرنے کے لئے ہے؟ اور کیا ہم یہاں باڑے کے فون کرنے والے ہے، 285 00:24:09,220 --> 00:24:17,690 پہلے ہی پر struct میں ذخیرہ کردہ ڈیٹا میں سے سب کے ساتھ اس کے عملے struct میں منظور. 286 00:24:17,690 --> 00:24:22,990 تو fprintf کہ ڈیٹا فائل سے براہ راست لکھنے کے قابل ہے. 287 00:24:22,990 --> 00:24:25,690 کوئی صارف کی ان پٹ کے لئے انتظار کر رہا ہے. 288 00:24:25,690 --> 00:24:32,110 صارف پہلے ہی مناسب طریقے سے یہ اس عملے struct میں ڈال کر ان پٹ دی گئی ہے. 289 00:24:32,110 --> 00:24:36,510 کورس کی چیزیں، توڑ اگر ان اشارہ میں سے کسی اتارنا null تھے، 290 00:24:36,510 --> 00:24:40,370 تو ہم یہاں واپس سکرال کریں اور ہم اپنے struct میں نظر آتے ہیں. 291 00:24:40,370 --> 00:24:43,640 ہم سٹرنگ آخری سٹرنگ، پہلے، سٹرنگ کا ای میل ہے. 292 00:24:43,640 --> 00:24:48,530 اب ہم جانتے ہیں کہ واقعی ان میں سے سب، ڈاکو کے تحت، چار * متغیر ہیں. 293 00:24:48,530 --> 00:24:53,470 جو اتارنا null سکتے ہیں یا نہیں کر سکتے ہیں کی طرف اشارہ کرتے ہوئے. 294 00:24:53,470 --> 00:24:55,800 وہ ڈھیر پر یاد کی طرف اشارہ کرتے ہوئے کر سکتے ہیں، 295 00:24:55,800 --> 00:24:59,650 اسٹیک پر شاید میموری. 296 00:24:59,650 --> 00:25:04,580 ہم واقعی نہیں جانتے ہو لیکن اگر یہ اشارہ میں سے کسی ایک، شہوت انگیز null یا غلط ہیں، 297 00:25:04,580 --> 00:25:08,120 کہ ہمارے باڑے تقریب ضرور کریش گے. 298 00:25:08,120 --> 00:25:11,050 یہ کچھ ہے کہ امتحان کے دائرہ کار سے باہر کی قسم تھی. 299 00:25:11,050 --> 00:25:16,440 ہم اس کے بارے میں فکر نہیں کر رہے ہیں. 300 00:25:16,440 --> 00:25:22,170 بہت اچھا ہے. ٹھیک ہے. تو کوئز سے بڑھ رہا ہے. 301 00:25:22,170 --> 00:25:25,760 >> چلو، اس لڑکے کو بند، اور ہم 4 pset کو دیکھنے کے لئے جا رہے ہیں. 302 00:25:25,760 --> 00:25:34,700 تو اگر آپ لوگ pset رپورٹ پر نظر، ایک بار آپ کو اس تک رسائی حاصل کر سکتے ہیں، cs50.net/quizzes 303 00:25:34,700 --> 00:25:42,730 ہم سیکشن کے مسائل آج کے کچھ کے ذریعے جانے کے لئے جا رہے ہیں. 304 00:25:42,730 --> 00:25:52,240 میں نیچے سکرول رہا ہوں. - سوالات کے سیکشن pset رپورٹ کے تیسرے صفحے پر شروع ہوتی ہے. 305 00:25:52,240 --> 00:25:57,800 اور پہلا حصہ آپ سے کہتا ہے اور منتقل کیا جا رہا ہے اور پائپ پر مختصر دیکھنے. 306 00:25:57,800 --> 00:26:02,820 Cool مختصر طرح تھا، آپ کو کچھ نئے، ڈاؤن لوڈ، اتارنا کمانڈ لائن ترکیبیں ہے کہ آپ استعمال کر سکتے ہیں دکھاتا ہے. 307 00:26:02,820 --> 00:26:06,050 اور پھر ہم نے آپ کے لئے ایک چند سوالوں کے ساتھ مل گیا ہے. 308 00:26:06,050 --> 00:26:10,860 اسٹریمز کے بارے میں یہ پہلا سوال ہے، جس printf ڈیفالٹ کی طرف سے لکھا ہے، 309 00:26:10,860 --> 00:26:15,920 ہم اس قسم کی صرف تھوڑا سا ایک لمحے پہلے چھوا. 310 00:26:15,920 --> 00:26:22,380 یہ fprintf ہے کہ ہم صرف بات کر رہے تھے، اس کی دلیل کے طور پر ایک فائل * کے سلسلے میں لیتا ہے. 311 00:26:22,380 --> 00:26:26,580 fclose ایک فائل * کے سلسلے میں لیتا ہے، 312 00:26:26,580 --> 00:26:32,660 اور fopen کی واپسی کی قیمت آپ کو ایک فائل * ندی کے ساتھ ساتھ دیتا ہے. 313 00:26:32,660 --> 00:26:36,060 وجہ سے ہم سے پہلے لوگوں پر نہیں دیکھا ہے جب ہم printf کے ساتھ نمٹا ہے 314 00:26:36,060 --> 00:26:39,450 کیونکہ printf ڈیفالٹ ندی ہے. 315 00:26:39,450 --> 00:26:41,810 اور ڈیفالٹ ندی ہے جس سے یہ لکھتے ہیں 316 00:26:41,810 --> 00:26:45,190 آپ کے بارے میں مختصر میں باہر تلاش کر لیں گے. 317 00:26:45,190 --> 00:26:50,080 تو یقینی طور پر اس پر ایک نظر لے لو. 318 00:26:50,080 --> 00:26:53,010 >> آج کے حصے میں، ہم GDB کے بارے میں تھوڑا بہت بات کرنے جا رہے ہیں، 319 00:26:53,010 --> 00:26:57,720 سے زیادہ واقف تم اس کے ساتھ ہیں، تو آپ کو اس سے زیادہ سے زیادہ پریکٹس، 320 00:26:57,720 --> 00:27:01,390 بہتر کر سکیں آپ اصل میں نیچے اپنے اپنے کوڈ میں کیڑے کا شکار ہو جائے گا. 321 00:27:01,390 --> 00:27:05,540 یہ بہت ٹھیک کرنے کے عمل کی رفتار. 322 00:27:05,540 --> 00:27:09,230 تو printf کا استعمال کرتے ہوئے کی طرف سے، ہر بار تم نے کیا ہے کہ آپ اپنے کوڈ کو recompile ہے، 323 00:27:09,230 --> 00:27:13,000 آپ اسے دوبارہ چلانے ہے، کبھی کبھی آپ printf کال کے ارد گرد منتقل ہے، 324 00:27:13,000 --> 00:27:17,100 اسے باہر کوڈ تبصرہ، صرف ایک وقت لیتا ہے. 325 00:27:17,100 --> 00:27:20,850 ہمارا مقصد ہے اور آپ کو قائل ہے کہ GDB کے ساتھ، آپ بنیادی طور پر کر سکتے ہیں کرنے کی کوشش کرنا ہے 326 00:27:20,850 --> 00:27:26,810 آپ کے کوڈ میں کسی بھی موڑ پر printf کچھ اور آپ کو اسے recompile کبھی نہیں. 327 00:27:26,810 --> 00:27:35,120 تم نے اور printf اگلے جہاں اندازہ رکھنے شروع کرنے کے لئے کبھی نہیں. 328 00:27:35,120 --> 00:27:40,910 اس لائن کی کاپی کرنے کے لئے سب سے پہلے کام اور حصے کوڈ ویب سے دور ہو. 329 00:27:40,910 --> 00:27:47,530 میں کوڈ کی اس لائن ہے جو یہ کہتا ہے کہ، "wget ​​http://cdn.cs50.net" کاپی کر رہا ہوں. 330 00:27:47,530 --> 00:27:49,510 میں اس کو کاپی کرنے کے لئے جا رہا ہوں. 331 00:27:49,510 --> 00:27:55,950 میں اپنے آلات کو جا رہا ہوں، تم اتنا دیکھنا ہے کہ میں کیا کر رہا ہوں کر سکتے ہیں، زوم 332 00:27:55,950 --> 00:28:01,890 وہاں میں پیسٹ، اور جب میں درج کریں مارا، اس wget کمانڈ لفظی ہے ایک ویب حاصل ہے. 333 00:28:01,890 --> 00:28:06,210 یہ اس فائل انٹرنیٹ کی ھیںچو جا رہا ہے، 334 00:28:06,210 --> 00:28:11,790 اور اسے موجودہ ڈائریکٹری کو بچانے کے لئے جا رہا ہے. 335 00:28:11,790 --> 00:28:21,630 اب تم دیکھو اگر میں اپنے موجودہ فہرست ڈائریکٹری کہ میں ابھی وہاں میں اس section5.zip فائل ہے کر سکتے ہیں. 336 00:28:21,630 --> 00:28:25,260 اس آدمی کے ساتھ نمٹنے کا طریقہ اسے ان زپ کرنے کے لئے ہے، 337 00:28:25,260 --> 00:28:27,650 جو آپ کو صرف اس طرح کمانڈ لائن میں کیا کر سکتے ہیں. 338 00:28:27,650 --> 00:28:31,880 Section5.zip. 339 00:28:31,880 --> 00:28:36,980 وہ اسے ان زپ کریں گے، میرے لئے فولڈر تخلیق کرتے ہیں، 340 00:28:36,980 --> 00:28:40,410 مواد کی سب فلانا، انہیں وہاں میں ڈال دیا ہے. 341 00:28:40,410 --> 00:28:47,410 تو اب میں میرے حصے 5 CD کمانڈ کا استعمال کرتے ہوئے ڈائریکٹری میں جا سکتے ہیں. 342 00:28:47,410 --> 00:28:58,310 واضح کا استعمال کرتے ہوئے سکرین کو صاف کریں. تو سکرین صاف کریں. 343 00:28:58,310 --> 00:29:02,280 اب میں نے ایک اچھا صاف سے نمٹنے کے ٹرمینل ہے. 344 00:29:02,280 --> 00:29:06,200 >> اب اگر میں تمام فائلوں ہے کہ میں اس ڈائریکٹری میں نظر آنے والے کی فہرست، 345 00:29:06,200 --> 00:29:12,270 تم نے دیکھا ہے کہ میں چار فائلیں ہے: buggy1، buggy2، buggy3 اور buggy4. 346 00:29:12,270 --> 00:29:16,180 میں نے بھی ان کی اسی. سی فائلوں ہے. 347 00:29:16,180 --> 00:29:20,400 ہم اب کے لئے سی فائلوں. میں نظر نہیں آ رہے ہیں. 348 00:29:20,400 --> 00:29:24,140 اس کے بجائے، ہم ان سے جب ہم نے GDB کھولنے کے لئے استعمال کرنے کے لئے جا رہے ہیں. 349 00:29:24,140 --> 00:29:28,220 ہم نے ان کو رکھا ارد گرد ہے تاکہ ہم اصل منبع کوڈ کو رسائی حاصل ہے جب ہم GDB کو استعمال کر رہے ہیں، 350 00:29:28,220 --> 00:29:32,740 لیکن سیکشن کے اس حصے کا مقصد GDB کے ساتھ کے ارد گرد ٹنکر ہے 351 00:29:32,740 --> 00:29:40,370 اور دیکھ کہ ہم کس طرح اس کا استعمال جاننے میں ان چار چھوٹی گاڑی پروگراموں میں سے ہر ایک کے ساتھ کیا غلط ہو رہا ہے کر سکتے ہیں. 352 00:29:40,370 --> 00:29:43,380 تو ہم نے کمرے میں چاروں طرف صرف کر رہے ہیں واقعی بہت تیزی سے ہو رہا ہے، 353 00:29:43,380 --> 00:29:47,000 اور میں کسی چھوٹی گاڑی پروگراموں میں سے ایک کو چلانے کے لئے کہنے جا رہا ہوں، 354 00:29:47,000 --> 00:29:54,730 اور پھر ہم GDB کے ذریعے ایک گروپ کے طور پر جانا، اور ہم دیکھتے ہیں کہ ہم ان پروگراموں کو درست کر سکتا ہوں گے، 355 00:29:54,730 --> 00:29:58,460 یا کم از کم کی نشاندہی ہے کہ ان میں سے ہر ایک میں غلط ہو رہا ہے. 356 00:29:58,460 --> 00:30:04,760 ختم ڈینیل کے ساتھ شروع کریں. آپ buggy1 چلے گا؟ چلو دیکھتے ہیں کیا ہوتا ہے. 357 00:30:04,760 --> 00:30:09,470 [ڈینیل] یہ کہتے ہیں کہ ایک درخواست کی غلطی ہے. >> جی ہاں. بالکل. 358 00:30:09,470 --> 00:30:12,460 تو اگر میں buggy1 چلاتے ہیں، میں ایک seg غلطی ملتا ہے. 359 00:30:12,460 --> 00:30:16,210 اس وقت میں جا، اور buggy1.c کھول سکتے ہیں، 360 00:30:16,210 --> 00:30:19,450 اور اعداد و شمار کیا غلط ہو رہا ہے کرنے کی کوشش کریں، 361 00:30:19,450 --> 00:30:22,000 لیکن اس seg غلطی کی خرابی کے بارے میں سب سے زیادہ obnoxious چیزوں میں سے ایک 362 00:30:22,000 --> 00:30:27,610 یہ ہے کہ یہ پروگرام چیزوں کے مطابق اصل میں کیا غلط ہو گیا اور توڑ دیا آپ کو بتا نہیں ہے. 363 00:30:27,610 --> 00:30:29,880 آپ کی قسم کے کوڈ کو دیکھنے کے لئے کی ضرورت 364 00:30:29,880 --> 00:30:33,990 اور اندازہ کا استعمال کرتے ہوئے اندازہ لگا اور چیک کرنے کے لیے یا printf دیکھو کیا غلط ہو رہا ہے. 365 00:30:33,990 --> 00:30:37,840 GDB کے بارے میں بہترین چیزوں میں سے ایک یہ ہے کہ یہ بہت، بہت آسان ہے 366 00:30:37,840 --> 00:30:42,170 لائن جاننے کی، جس میں آپ کے پروگرام گر کر تباہ. 367 00:30:42,170 --> 00:30:46,160 یہ مکمل طور پر اسے استعمال کرنے کے لئے کے قابل ہے، یہاں تک کہ اگر صرف اس کے لئے ہے. 368 00:30:46,160 --> 00:30:56,190 تو GDB بوٹ، میں GDB ٹائپ کریں، اور پھر میں نے اسے ایکزیکیوٹیبل کہ میں چلانا چاہتے ہیں اس کے پاس راستے دے. 369 00:30:56,190 --> 00:31:01,960 یہاں میں ./buggy1 gdb ٹائپ کر رہا ہوں. 370 00:31:01,960 --> 00:31:06,600 درج کریں مارو. مجھے یہ سب کاپی رائٹ کی معلومات فراہم کرتا ہے، 371 00:31:06,600 --> 00:31:13,000 اور نیچے یہاں آپ کو یہ لائن نظر آئے گی جو یہ کہتا ہے کہ، "/ / گھر سے پڑھنا علامات 372 00:31:13,000 --> 00:31:17,680 jharvard/section5/buggy1. " 373 00:31:17,680 --> 00:31:22,060 اور اگر سب کچھ ٹھیک جاتا ہے تم نے دیکھا، یہ ایک پیغام ہے کہ اس طرح لگ رہا ہے کو پرنٹ کریں گے. 374 00:31:22,060 --> 00:31:25,500 یہ علامات پڑھ ہوں، اس کا کہنا ہے کہ، انہوں نے کہا کہ میں اپنے executable فائل سے علامات پڑھ رہا ہوں، "گے 375 00:31:25,500 --> 00:31:29,900 اور پھر یہ یہاں اس "کیا" پیغام ہو گا. 376 00:31:29,900 --> 00:31:35,410 اگر آپ کو اس میں سے کچھ دوسرے تغیرات دیکھنے میں مدد ملے گی، یا تم دیکھو، یہ علامات نہیں مل سکا 377 00:31:35,410 --> 00:31:41,460 یا ایسا کچھ کیا ہے اس کا مطلب ہے کہ آپ کے پاس صرف آپ کی کارکردگی مرتب نہیں کیا ہے مناسب طریقے سے. 378 00:31:41,460 --> 00:31:49,980 جب ہم GDB کے ساتھ استعمال کے لئے پروگرام مرتب، ہم کہ پرچم خصوصی G-استعمال کرنے کے لئے ہے، 379 00:31:49,980 --> 00:31:54,540 اور یہ کہ پہلے سے طے شدہ کی طرف سے کیا ہے کہ اگر آپ کو اپنے پروگراموں کو مرتب ٹائپ بنانے کی طرف سے 380 00:31:54,540 --> 00:31:59,320 یا چھوٹی گاڑی بنانے کی وصولی یا بنانا، ان میں سے کوئی بھی. 381 00:31:59,320 --> 00:32:07,800 لیکن اگر آپ بجنا کے ساتھ دستی طور پر مرتب کر رہے ہیں، تو آپ میں جانا ہے اور پرچم کہ G-شامل کرنا پڑے گا. 382 00:32:07,800 --> 00:32:10,310 >> اس وقت، اب کہ ہم اپنے GDB فوری ہے، 383 00:32:10,310 --> 00:32:12,310 پروگرام کو چلانے کے لئے یہ بہت آسان ہے. 384 00:32:12,310 --> 00:32:19,740 ہم رن یا تو، ٹائپ یا ہم R صرف ٹائپ کر سکتے ہیں کر سکتے ہیں. 385 00:32:19,740 --> 00:32:22,820 زیادہ تر GDB حکم مختصر ہو سکتا ہے. 386 00:32:22,820 --> 00:32:25,940 عام طور پر صرف ایک یا ایک جوڑے حروف، جو بہت اچھا ہے. 387 00:32:25,940 --> 00:32:30,980 تو سعد، اگر آپ نے ر ٹائپ اور مارا درج کریں، کیا ہوتا ہے؟ 388 00:32:30,980 --> 00:32:39,390 [سعد] میں SIGSEGV، انقطاع غلطی ہے، اور پھر یہ سب gobbledygook ہے. 389 00:32:39,390 --> 00:32:43,650 >> جی ہاں. 390 00:32:43,650 --> 00:32:47,990 ، جیسا کہ ہم ابھی سکرین پر دیکھ رہے ہیں، جیسا کہ اور خواجہ سعد نے کہا 391 00:32:47,990 --> 00:32:53,430 جب ہم رن یا ر ٹائپ اور درج کریں مارا، ہم اب بھی وہی seg غلطی ہو جاؤ. 392 00:32:53,430 --> 00:32:55,830 تو GDB کا استعمال کرتے ہوئے ہمارا مسئلہ حل نہیں ہوتا. 393 00:32:55,830 --> 00:32:59,120 لیکن یہ ہم میں سے کچھ gobbledygook دیتی ہے، اور یہ پتہ چلا ہے کہ اس gobbledygook 394 00:32:59,120 --> 00:33:03,080 اصل میں ہمیں بتاتا ہے جہاں یہ ہو رہا ہے. 395 00:33:03,080 --> 00:33:10,680 یہ ایک تھوڑا سا کا تجزیہ کرنے کے لئے، یہ پہلا سا تقریب ہے جس میں سب کچھ غلط ہو رہا ہے. 396 00:33:10,680 --> 00:33:20,270 اس strcmp_sse4_2 __ ہے، اور یہ ہمیں بتاتی ہے کہ اس فائل میں جو کچھ ہو رہا ہے 397 00:33:20,270 --> 00:33:29,450 کہا جاتا sysdeps/i386، یہ سب، پھر ایک گندگی کی طرح - لیکن 254 لائن. 398 00:33:29,450 --> 00:33:31,670 یہ کس قسم کی مشکل کا تجزیہ. عام طور پر جب آپ اس طرح کی چیزیں دیکھ، 399 00:33:31,670 --> 00:33:38,770 اس کا مطلب یہ ہے کہ یہ نظام لائبریریوں میں سے ایک میں faulting seg ہے. 400 00:33:38,770 --> 00:33:43,220 تو کچھ strcmp کے ساتھ کیا کرنا ہے. تم لوگ strcmp سے پہلے دیکھا ہے. 401 00:33:43,220 --> 00:33:52,730 بھی پاگل نہیں ہے لیکن اس کا مطلب ہوتا ہے کہ strcmp ٹوٹ یا یہ کہ وہاں strcmp کے ساتھ ایک مسئلہ ہے؟ 402 00:33:52,730 --> 00:33:57,110 آپ کیا الیگزینڈر سوچتے ہو؟ 403 00:33:57,110 --> 00:34:04,890 [الیگزینڈر] کیا ہے کہ - 254 لائن ہے؟ -، بائنری نہیں، لیکن یہ ان چھتوں نہیں ہے 404 00:34:04,890 --> 00:34:10,590 اور اس کے بعد ہر کام کے لئے کوئی دوسری زبان ہے. - ہے کہ اس تقریب میں 254، یا ہے؟ 405 00:34:10,590 --> 00:34:21,460 >> 254 لائن ہے. یہ اس فائل میں کی طرح لگتا ہے، یہ اسمبلی شاید کوڈ. 406 00:34:21,460 --> 00:34:25,949 >> لیکن، مجھے لگتا ہے کہ زیادہ اہم بات یہ ہے، کیونکہ ہم نے ایک seg غلطی ہو گیا ہے، 407 00:34:25,949 --> 00:34:29,960 اور ایسا لگتا ہے جیسے یہ strcmp تقریب سے آ رہا ہے. 408 00:34:29,960 --> 00:34:38,030 یہ کرتا ہے، مطلب تو، کہ strcmp ٹوٹ جاتا ہے؟ 409 00:34:38,030 --> 00:34:42,290 یہ امید نہیں کرنی چاہئے. تو صرف اس لئے کہ آپ کو ایک انقطاع غلطی ہے 410 00:34:42,290 --> 00:34:49,480 نظام کے افعال میں سے ایک میں، عام طور پر اس کا مطلب ہے کہ آپ صرف اس کا نام نہیں ہے درست طریقے سے. 411 00:34:49,480 --> 00:34:52,440 تیز ترین اعداد و شمار کیا اصل میں کیا چل رہا ہے کوئی بات 412 00:34:52,440 --> 00:34:55,500 ، جب آپ کچھ اس طرح پاگل، جب بھی آپ کو ایک seg غلطی نظر آئے 413 00:34:55,500 --> 00:34:59,800 خاص طور پر اگر آپ کو ایک پروگرام ہے کہ زیادہ سے زیادہ صرف مرکزی استعمال کر رہا ہے ہے، 414 00:34:59,800 --> 00:35:03,570 ایک backtrace استعمال کرنے کے لئے ہے. 415 00:35:03,570 --> 00:35:13,080 میں بیٹی لکھنے، کے طور پر مکمل backtrace لفظ کی مخالفت کی طرف سے backtrace abbreviate. 416 00:35:13,080 --> 00:35:16,510 لیکن شارلٹ، کیا ہوتا ہے جب آپ بیٹی ٹائپ کریں اور ہٹ درج کریں؟ 417 00:35:16,510 --> 00:35:23,200 [شارلٹ] یہ مجھے دو لائنز لائن 0 اور 1 لائن سے پتہ چلتا ہے. 418 00:35:23,200 --> 00:35:26,150 >> جی ہاں. تو لائن 0 اور اوپر 1. 419 00:35:26,150 --> 00:35:34,560 یہ اصل اسٹیک فریم ہے کہ کھیل میں اس وقت تھے جب آپ پروگرام گر کر تباہ ہو رہے ہیں. 420 00:35:34,560 --> 00:35:42,230 اولین فریم، 0 فریم سے شروع ہو رہا ہے، اور نیچے کے سب سے زیادہ، جس میں 1 فریم میں جانے کی ہے. 421 00:35:42,230 --> 00:35:45,140 ہمارا اولین فریم strcmp فریم ہے. 422 00:35:45,140 --> 00:35:50,080 آپ کو اس کے بارے میں سوچو جیسا کہ اس مسئلہ میں ہم صرف اشارہ کے ساتھ کوئز پر کیا کر رہے تھے اسی طرح کر سکتے ہیں، 423 00:35:50,080 --> 00:35:54,890 ہم اہم اسٹیک فریم کے سب سے اوپر پر جہاں اسٹیک فریم تبادلہ کیا تھا، 424 00:35:54,890 --> 00:35:59,700 اور ہم نے متغیر ہے کہ سویپ متغیر ہے کہ اہم استعمال کر رہے تھے کے سب سے اوپر پر استعمال کر رہا تھا تھا. 425 00:35:59,700 --> 00:36:08,440 یہ ہمارا حادثے ہماری strcmp تقریب، جو ہمارے بنیادی کام کی طرف سے کہا گیا تھا میں بھی ایسا ہی ہوا تھا، 426 00:36:08,440 --> 00:36:14,370 اور backtrace ہمیں دے جس میں نہ صرف کام کرتا ہے چیزوں میں ناکام رہے ہے، 427 00:36:14,370 --> 00:36:16,440 لیکن یہ بھی ہمیں بتا رہا ہے جہاں ہر چیز سے بلایا گیا تھا. 428 00:36:16,440 --> 00:36:18,830 اگر ایسا ہے تو میں تھوڑا اور پر حق سکرال، 429 00:36:18,830 --> 00:36:26,110 ہم دیکھتے ہیں کہ ہاں، ہم نے اس فائل strcmp sse4.s 254 لائن پر تھے سکتا ہے. 430 00:36:26,110 --> 00:36:32,540 لیکن کال buggy1.c، 6 لائن میں کیا گیا تھا. 431 00:36:32,540 --> 00:36:35,960 تو اس کا مطلب ہے کہ ہم کیا کر سکتے ہیں - یہ ہے کہ ہم صرف باہر کی جانچ پڑتال کریں اور دیکھو کہ کیا ہو رہا جا سکتا ہے 432 00:36:35,960 --> 00:36:39,930 buggy1.c، 6 لائن میں. 433 00:36:39,930 --> 00:36:43,780 ایک بار پھر، ایک جوڑے کو ایسا کرنے کے طریقے ہیں. ایک GDB سے باہر سے باہر نکلیں 434 00:36:43,780 --> 00:36:49,460 یا اپنے کوڈ کو کسی دوسرے ونڈو اور کراس حوالہ میں کھل. 435 00:36:49,460 --> 00:36:54,740 کہ میں بذات خود بہت آسان ہے کیونکہ اب اگر آپ کو دفتری اوقات میں ہیں 436 00:36:54,740 --> 00:36:57,220 اور آپ کو ایک seg غلطی ہے اور آپ کی TF سوچ جہاں سب کچھ توڑ کر رہے تھے، 437 00:36:57,220 --> 00:36:59,710 ، آپ صرف "اوہ، 6 لائن کا کہنا ہے کہ مجھے نہیں معلوم کہ کیا ہو رہا ہے کر سکتے ہیں. 438 00:36:59,710 --> 00:37:03,670 لیکن 6 لائن کے بارے میں کچھ اپنے پروگرام کو توڑنے کے لئے کی وجہ سے ہے. " 439 00:37:03,670 --> 00:37:10,430 دیگر ایسا کرنے کا ایک طریقہ ہے آپ اس GDB میں سے ملاقات کی فہرست کمانڈ کا استعمال کر سکتے ہیں. 440 00:37:10,430 --> 00:37:13,650 تم نے یہ L ساتھ بھی abbreviate کر سکتے ہیں. 441 00:37:13,650 --> 00:37:18,910 لہذا اگر ہم L مارا، کیا ہم یہاں کیا ملتا ہے؟ 442 00:37:18,910 --> 00:37:21,160 ہم نے عجیب چیزیں کی ایک پوری چڑھانے ملتا ہے. 443 00:37:21,160 --> 00:37:26,030 یہ اصل اسمبلی کوڈ آن ہے 444 00:37:26,030 --> 00:37:29,860 ہے جو strcmp_sse4_2 میں ہے. 445 00:37:29,860 --> 00:37:32,440 یہ funky کی طرح لگتا ہے، 446 00:37:32,440 --> 00:37:36,520 اور وجہ ہے ہم یہ ہو رہی ہے کی وجہ سے ابھی ہے، 447 00:37:36,520 --> 00:37:40,160 GDB 0 فریم میں ہے. 448 00:37:40,160 --> 00:37:43,070 >> تو ہم کسی بھی وقت نظر آتے ہیں متغیرات میں، کسی بھی وقت ہم ماخذ کوڈ پر نظر 449 00:37:43,070 --> 00:37:50,530 ہم ماخذ کوڈ میں تلاش کر کہ اسٹیک فریم سے متعلق ہم اس وقت اندر ہو رہے ہیں 450 00:37:50,530 --> 00:37:53,200 تو کے لئے بامعنی کچھ حاصل کرنے کے لئے، ہم 451 00:37:53,200 --> 00:37:57,070 ایک اسٹیک فریم ہے جو زیادہ سمجھ میں آتا ہے میں منتقل کریں. 452 00:37:57,070 --> 00:38:00,180 اس صورت میں، اہم اسٹیک فریم تھوڑا اور احساس کرے گا، 453 00:38:00,180 --> 00:38:02,680 کیونکہ وہ اصل میں کوڈ ہے کہ ہم نے لکھا تھا. 454 00:38:02,680 --> 00:38:05,330 strcmp کوڈ نہیں. 455 00:38:05,330 --> 00:38:08,650 طرح آپ کو اس کیس میں فریم کے درمیان منتقل، کیونکہ ہم دو کر سکتے ہیں، 456 00:38:08,650 --> 00:38:10,430 ہم 0 اور 1 کے ہے، 457 00:38:10,430 --> 00:38:13,650 آپ کے پاس ہے کہ اوپر سے نیچے تک حکم کے ساتھ کرتے ہیں. 458 00:38:13,650 --> 00:38:18,480 اگر میں نے ایک فریم میں منتقل، 459 00:38:18,480 --> 00:38:21,770 اب میں اہم اسٹیک فریم میں ہوں. 460 00:38:21,770 --> 00:38:24,330 میں نیچے میں کہاں تھا واپس جا سکتے ہیں، 461 00:38:24,330 --> 00:38:32,830 پھر جاؤ، نیچے پھر جانا، اور پھر جاؤ. 462 00:38:32,830 --> 00:38:39,750 اگر تم نے کبھی GDB میں آپ کے پروگرام کرتے ہیں، آپ کو ایک حادثے ملتی ہے، تو آپ کو backtrace ملے، 463 00:38:39,750 --> 00:38:42,380 اور آپ دیکھتے ہیں کہ یہ کچھ فائل تمہیں پتہ نہیں کیا ہو رہا ہے میں ہے. 464 00:38:42,380 --> 00:38:45,460 آپ کی فہرست کی کوشش کرتے ہیں، آپ نے جو کوڈ پر واقف نظر نہیں، 465 00:38:45,460 --> 00:38:48,150 آپ کے فریم پر ایک نظر لو اور باہر کہاں ہو تم اعداد و شمار. 466 00:38:48,150 --> 00:38:51,010 آپ کو شاید غلط اسٹیک فریم میں ہیں. 467 00:38:51,010 --> 00:38:58,760 یا کم سے کم آپ ایک اسٹیک فریم ہے کہ ایک ہے کہ آپ واقعی ڈیبگ کر سکتے ہیں نہیں ہے میں ہیں. 468 00:38:58,760 --> 00:39:03,110 اب کہ ہم مناسب اسٹیک فریم میں ہیں، ہم اہم ہیں، 469 00:39:03,110 --> 00:39:08,100 اب ہم فہرست کمانڈ کا استعمال کرتے ہوئے اعداد و شمار کیا لائن تھا کر سکتے ہیں. 470 00:39:08,100 --> 00:39:13,590 اور تم اسے دیکھ سکتے ہیں، اور یہ ہمارے لئے طباعت یہیں ہے. 471 00:39:13,590 --> 00:39:19,470 لیکن ہم سب ایک ہی فہرست مارا، اور ان کی فہرست ہمیں یہ اچھی پرنٹ آؤٹ دیتا ہے کر سکتے ہیں 472 00:39:19,470 --> 00:39:23,920 اصل منبع کوڈ ہے جو یہاں ہو رہا ہے. 473 00:39:23,920 --> 00:39:26,420 >> خاص طور پر، ہم نے 6 لائن دیکھ سکتے ہیں. 474 00:39:26,420 --> 00:39:29,330 ہم دیکھتے ہیں یہاں کیا چل رہا ہے کر سکتے ہیں. 475 00:39:29,330 --> 00:39:31,250 اور ایسا لگتا ہے جیسے ہم ایک تار کا موازنہ کر رہے ہیں 476 00:39:31,250 --> 00:39:41,050 سٹرنگ "CS50 پتھر" اور argv کے درمیان [1]. 477 00:39:41,050 --> 00:39:45,700 اس کے بارے میں کچھ اجلاس ہونے کے تناظر کیا گیا تھا. 478 00:39:45,700 --> 00:39:54,120 تو Missy، آپ کیا یہاں جا سکتا ہے کسی بھی خیالات ہے؟ 479 00:39:54,120 --> 00:39:59,400 [Missy] مجھے پتہ نہیں کیوں یہ اجلاس ہونے کے تناظر نہیں ہے. >> آپ کو پتہ نہیں کیوں یہ اجلاس ہونے کے تناظر ہے یا نہیں؟ 480 00:39:59,400 --> 00:40:02,700 جمی، کوئی خیالات؟ 481 00:40:02,700 --> 00:40:06,240 [جمی]، میں مکمل طور پر اس بات کا یقین نہیں ہوں، لیکن آخری بار ہم نے سٹرنگ کا استعمال کیا موازنہ 482 00:40:06,240 --> 00:40:10,260 یا strcmp، ہم نے اس کے تحت تین مختلف مقدمات کی طرح تھا. 483 00:40:10,260 --> 00:40:12,800 ہم == ایک نہیں تھا، میرے خیال میں، ٹھیک ہے کہ پہلی سطر میں نہیں ہے. 484 00:40:12,800 --> 00:40:16,700 اس کے بجائے اسے تین میں الگ کیا گیا تھا، اور ایک == 0 تھا، 485 00:40:16,700 --> 00:40:19,910 میں سے ایک تھا <0، مجھے لگتا ہے کہ، اور ایک> 0. 486 00:40:19,910 --> 00:40:22,590 تو اس طرح کچھ ہو سکتا ہے؟ >> جی ہاں. تو اس مسئلہ ہے 487 00:40:22,590 --> 00:40:27,200 ہم موازنہ کر رہے ہیں درست طریقے سے؟ 488 00:40:27,200 --> 00:40:31,660 سٹیلا؟ کوئی خیال؟ 489 00:40:31,660 --> 00:40:38,110 [سٹیلا] مجھے یقین نہیں ہے. >> یقین نہیں ہے. ڈینیل؟ خیال؟ ٹھیک ہے. 490 00:40:38,110 --> 00:40:44,770 یہ پتہ چلتا ہے کیا یہاں ہو رہا ہے جب ہم پروگرام بھاگ گیا ہے 491 00:40:44,770 --> 00:40:48,370 اور ہم seg غلطی ہے، جب آپ پہلی بار کے لئے پروگرام، ڈینیل بھاگ گیا، 492 00:40:48,370 --> 00:40:50,800 کیا تم نے یہ کسی بھی کمانڈ لائن کے دلائل دے؟ 493 00:40:50,800 --> 00:40:58,420 [ڈینیل] نہیں. نہیں. >> اس صورت میں، کیا argv کی قیمت ہے [1] 494 00:40:58,420 --> 00:41:00,920 >> کوئی قیمت نہیں ہے. >> حق ہے. 495 00:41:00,920 --> 00:41:06,120 ٹھیک ہے، کوئی مناسب سٹرنگ کی قیمت ہے. 496 00:41:06,120 --> 00:41:10,780 لیکن وہاں کوئی قیمت نہیں ہے. کیا قیمت ہے جو وہاں میں جمع ہو جاتا ہے؟ 497 00:41:10,780 --> 00:41:15,130 >> ایک ردی کی ٹوکری کی قیمت ہے؟ >> یہ یا تو ردی کی ٹوکری قدر ہے یا اس کیس میں، 498 00:41:15,130 --> 00:41:19,930 argv صف کے آخر ہمیشہ اتارنا null ساتھ ختم کیا جاتا ہے. 499 00:41:19,930 --> 00:41:26,050 تو جو اصل میں جمع ہو گئے شہوت انگیز null ہے. 500 00:41:26,050 --> 00:41:30,810 دوسرا طریقہ ہے بلکہ یہ سوچ کے ذریعے سے اس کو حل کرنے، 501 00:41:30,810 --> 00:41:33,420 یہ چھپائی باہر کرنے کی کوشش کریں. 502 00:41:33,420 --> 00:41:35,880 یہی وہ جگہ ہے جہاں میں یہ کہہ رہا ہوں کہ GDB کا استعمال کرتے ہوئے بہت اچھا ہے، 503 00:41:35,880 --> 00:41:40,640 کیونکہ آپ تمام متغیر پرنٹ کر سکتے ہیں، تمام اقدار جو آپ چاہتے ہیں 504 00:41:40,640 --> 00:41:43,230 اس ہاتھ بانکا P-کمانڈ کا استعمال کرتے ہوئے. 505 00:41:43,230 --> 00:41:48,520 تو اگر میں پی ٹائپ کریں، اور پھر میں ایک متغیر یا ایک متغیر کے نام کی قدر ٹائپ کریں، 506 00:41:48,520 --> 00:41:55,320 ، argc کا کہنا ہے کہ، میں نے دیکھا ہے کہ argc 1 ہے. 507 00:41:55,320 --> 00:42:01,830 اگر میں باہر argv پرنٹ کرنا چاہتے ہیں [0]، میں نے ایسے ہی ایسا کر سکتے ہیں. 508 00:42:01,830 --> 00:42:04,840 اور جیسا کہ ہم نے دیکھا، argv [0]، ہمیشہ اپنے پروگرام کا نام ہے 509 00:42:04,840 --> 00:42:06,910 ہمیشہ کارکردگی کے نام پر. 510 00:42:06,910 --> 00:42:09,740 آپ کو یہاں دیکھ کر یہ مکمل راستہ کا نام مل گیا ہے. 511 00:42:09,740 --> 00:42:15,920 میں نے بھی argv [1] اور دیکھتے ہیں کیا ہوتا ہے. پرنٹ کر سکتے ہیں 512 00:42:15,920 --> 00:42:20,890 >> یہاں ہم صوفیانہ قدر کا اس طرح ہے. 513 00:42:20,890 --> 00:42:23,890 ہم اس 0x0 ہے. 514 00:42:23,890 --> 00:42:27,850 مدت کے آغاز میں جب ہم شش اعشاری تعداد کے بارے میں بات کی تو یاد رکھیں؟ 515 00:42:27,850 --> 00:42:34,680 یا ہے کہ کس طرح hex میں 50 کی نمائندگی کرنے کے بارے میں 0 pset کے آخر میں چھوٹا سا سوال ہے؟ 516 00:42:34,680 --> 00:42:39,410 جس طرح سے ہم CS میں hex تعداد لکھ، صرف خود کو الجھانے نہیں 517 00:42:39,410 --> 00:42:46,080 دشملو تعداد کے ساتھ ہے، ہم ہمیشہ ان کے 0x کے ساتھ سابقہ. 518 00:42:46,080 --> 00:42:51,420 تو یہ 0x سابقہ ​​ہمیشہ صرف کا مطلب ہے کہ ایک شش اعشاری تعداد کے طور پر مندرجہ ذیل تعداد کی تشریح، 519 00:42:51,420 --> 00:42:57,400 ایک تار کے طور پر نہیں، ایک دشملو تعداد کے طور پر نہیں، نہیں ایک بائنری تعداد کے طور پر. 520 00:42:57,400 --> 00:43:02,820 چونکہ 5-0 تعداد شش اعشاری میں ایک درست تعداد ہے. 521 00:43:02,820 --> 00:43:06,240 اور دشملو، 50 میں ایک بڑی تعداد ہے. 522 00:43:06,240 --> 00:43:10,050 تو یہ ہے کہ ہم کس طرح disambiguate. 523 00:43:10,050 --> 00:43:14,860 تو 0x0 ذرائع شش اعشاری 0،، جو بھی ہے دشملو 0 0 بائنری. 524 00:43:14,860 --> 00:43:17,030 یہ صرف قدر 0 ہے. 525 00:43:17,030 --> 00:43:22,630 یہ پتہ چلا ہے کہ یہ وہی ہے جو اتارنا null ہے، اصل میں یاد میں. 526 00:43:22,630 --> 00:43:25,940 شہوت انگیز null صرف 0 ہے. 527 00:43:25,940 --> 00:43:37,010 یہاں عنصر argv پر محفوظ ہے [1]، شہوت انگیز null ہے. 528 00:43:37,010 --> 00:43:45,220 تو ہم شہوت انگیز null سٹرنگ پر ہمارے "CS50 پتھروں" سٹرنگ کا موازنہ کرنے کی کوشش کر رہے ہیں. 529 00:43:45,220 --> 00:43:48,130 تو، شہوت انگیز null محولہ لقب ضبطی، شہوت انگیز null چیزوں تک رسائی کی کوشش کر 530 00:43:48,130 --> 00:43:55,050 ان لوگوں کو عام طور پر انقطاع کی غلطی یا دوسرے بری چیزیں ہو کسی قسم کی وجہ سے جا رہے ہیں. 531 00:43:55,050 --> 00:43:59,350 اور یہ پتہ چلا ہے کہ strcmp کو دیکھنے کے لئے چیک کرنے کے لیے نہیں ہے 532 00:43:59,350 --> 00:44:04,340 یا نہیں آپ کو ایک قدر ہے کہ لوڈ، اتارنا null ہے میں منظور کر لیا ہے. 533 00:44:04,340 --> 00:44:06,370 بلکہ، یہ صرف آگے جاتا ہے، اس کی بات کرنے کی کوشش کرتا ہے، 534 00:44:06,370 --> 00:44:14,640 اور اگر اس گناہ seg گناہ seg، اور یہ آپ کا مسئلہ ہے. تم جاؤ اسے درست کرنے کی ہے. 535 00:44:14,640 --> 00:44:19,730 واقعی جلدی، ہم اس مسئلہ کو کس طرح ٹھیک ہو سکتا ہے؟ شارلٹ؟ 536 00:44:19,730 --> 00:44:23,540 [شارلٹ] آپ چیک کرنے کے لیے اگر کا استعمال کرتے ہوئے کر سکتے ہیں. 537 00:44:23,540 --> 00:44:32,240 تو اگر argv [1] شہوت انگیز null ہے، 0 ==، تو 1 واپس یا کچھ [unintelligible]. 538 00:44:32,240 --> 00:44:34,590 >> جی ہاں. تو وہ ایک عظیم ایسا کرنے کا ایک طریقہ ہے، جیسا کہ ہم دیکھ کر چیک کر سکتے ہیں، 539 00:44:34,590 --> 00:44:39,230 قدر ہم ہو strcmp میں منتقل کرنے کی، argv [1]، شہوت انگیز null، ہے؟ 540 00:44:39,230 --> 00:44:45,830 اگر یہ شہوت انگیز null ہے، تو ہم ٹھیک کہتے ہیں، اسقاط حمل ہو سکتا کر سکتے ہیں. 541 00:44:45,830 --> 00:44:49,450 >> ایک زیادہ عام ایسا کرنے کا طریقہ argc قدر کو استعمال کرنے کے لئے ہے. 542 00:44:49,450 --> 00:44:52,040 آپ کا اہم آغاز میں یہاں دیکھ سکتے ہیں، 543 00:44:52,040 --> 00:44:58,040 ہم کہ پہلے ٹیسٹ لپ ہے کہ ہم عام طور پر جب ہم کمانڈ لائن کے دلائل کا استعمال کرتے ہیں، 544 00:44:58,040 --> 00:45:05,240 جو ٹیسٹ یا ہمارے argc قدر نہیں ہے جو ہم توقع ہے. 545 00:45:05,240 --> 00:45:10,290 اس صورت میں، ہم کم از کم دو دلائل کی توقع کر رہے ہیں، 546 00:45:10,290 --> 00:45:13,660 پروگرام کے نام کے علاوہ دوسرے ایک ہے. 547 00:45:13,660 --> 00:45:17,140 کیونکہ ہم دوسری دلیل کو یہاں استعمال کے بارے میں ہے. 548 00:45:17,140 --> 00:45:21,350 تو ہماری strcmp کال سے پہلے ٹیسٹ کے کچھ قسم سے پہلے ہے، 549 00:45:21,350 --> 00:45:37,390 کہ ٹیسٹ یا نہیں argv کم سے کم 2 ہے، بات کے اسی طرح بھی کرے گی. 550 00:45:37,390 --> 00:45:40,620 ہم دیکھتے ہیں اگر اس پروگرام کو دوبارہ چلانے کی طرف سے کام کرتا ہے کر سکتے ہیں. 551 00:45:40,620 --> 00:45:45,610 آپ GDB، جو بہت اچھا ہے کے اندر اندر آپ کے پروگرام کو ہمیشہ کو دوبارہ شروع کر سکتے ہیں. 552 00:45:45,610 --> 00:45:49,310 آپ چلاتے ہیں، اور جب تم نے دلائل میں آپ کے پروگرام میں منتقل کر سکتی ہیں، 553 00:45:49,310 --> 00:45:53,060 تم نے انہیں جب آپ اسے چلانے کے فون میں گزرتے ہیں، نہیں ہے جب آپ کو GDB بوٹ. 554 00:45:53,060 --> 00:45:57,120 اس طرح آپ کو مختلف دلائل کے ساتھ آپ کے پروگرام میں ہر وقت invoking رکھ سکتے ہیں. 555 00:45:57,120 --> 00:46:08,080 تو چلاتے ہیں، یا پھر، میں ر ٹائپ کر سکتے ہیں، اور ہم دیکھتے ہیں کیا ہوتا ہے اگر ہم ٹائپ "ہیلو". 556 00:46:08,080 --> 00:46:11,140 یہ آپ کو ہمیشہ سے پوچھیں گے کہ آپ اسے شروع سے دوبارہ شروع کرنا چاہتے ہیں کریں گے. 557 00:46:11,140 --> 00:46:17,490 عام طور پر، آپ اسے شروع سے دوبارہ شروع کرنا چاہتے ہیں. 558 00:46:17,490 --> 00:46:25,010 اور اس وقت، اس کے دوبارہ چلنا اسے دوبارہ، اسے باہر پرنٹ 559 00:46:25,010 --> 00:46:28,920 پروگرام کہ ہم چل buggy1 رہے ہیں دلیل ہیلو، 560 00:46:28,920 --> 00:46:32,720 اور یہ اس معیار کو پرنٹ ہے، اس کا کہنا ہے کہ، "تم D ملتا ہے،" اداس چہرہ. 561 00:46:32,720 --> 00:46:37,610 لیکن ہم غلطی seg نہیں تھا. نے کہا کہ اس عمل کو عام طور پر باہر ہو. 562 00:46:37,610 --> 00:46:39,900 تو یہ بہت اچھا لگ رہا ہے. 563 00:46:39,900 --> 00:46:43,050 کوئی seg زیادہ غلطی ہے، ہم نے اسے ماضی بنا دیا ہے، 564 00:46:43,050 --> 00:46:48,190 تو ایسا لگتا ہے جیسے کہ یقینا seg غلطی مسئلے جو ہم حاصل کر رہے ہیں. 565 00:46:48,190 --> 00:46:51,540 بدقسمتی سے، یہ ہمیں بتاتا ہے کہ ہم نے ایک D. ہو رہے ہیں 566 00:46:51,540 --> 00:46:54,090 >> ہمیں واپس جانا اور کوڈ کو دیکھو کر سکتے ہیں اور دیکھو کہ وہاں کیا جا رہا تھا 567 00:46:54,090 --> 00:46:57,980 اعداد و شمار کیا تھا - یہ ہمیں کیوں کہہ رہا ہوں کہ ہم ایک D. تھی 568 00:46:57,980 --> 00:47:03,690 چلو دیکھتے ہیں، یہاں اس printf کہہ رہے ہیں کہ آپ ایک ڈی ہے 569 00:47:03,690 --> 00:47:08,540 اگر ہم فہرست ٹائپ کریں، جیسا کہ آپ کے پاس ٹائپ کی فہرست رکھنے کے لئے، یہ آپ کے پروگرام کے ذریعے نیچے iterating رکھتا ہے، 570 00:47:08,540 --> 00:47:10,940 تو یہ آپ کو آپ کے پروگرام کی پہلی چند لائنیں دکھائیں گے. 571 00:47:10,940 --> 00:47:15,450 اس کے بعد آپ کو اگلے چند سطریں، اور اگلے حصہ اور اگلے حصہ دکھائیں گے. 572 00:47:15,450 --> 00:47:18,240 اور نیچے جانے کی کوشش کر رہے رکھیں گے. 573 00:47:18,240 --> 00:47:21,180 اور اب ہم "لائن 16 تعداد حد سے باہر ہے." ملے گی 574 00:47:21,180 --> 00:47:23,940 کیونکہ یہ صرف 15 لائنوں ہیں. 575 00:47:23,940 --> 00:47:30,310 اگر آپ اس نقطہ حاصل کرنے کے لئے اور آپ کی سوچ، "میں کیا کروں؟" آپ کی مدد کی کمانڈ کا استعمال کر سکتے ہیں. 576 00:47:30,310 --> 00:47:34,340 کا استعمال کریں اور اس کے بعد کی مدد سے یہ ایک کمانڈ کے نام پر دے. 577 00:47:34,340 --> 00:47:36,460 اور تم دیکھ کر GDB ہمیں ساری چیزیں اس طرح دیتا ہے. 578 00:47:36,460 --> 00:47:43,870 یہ کہتا ہے، انہوں نے کہا کہ بغیر کسی دلیل کے ساتھ، کے بعد یا اس کے ارد گرد گزشتہ لسٹنگ دس لائنوں کی فہرست ہے. 579 00:47:43,870 --> 00:47:47,920 فہرست - سے پہلے دس لائنوں کی فہرست - " 580 00:47:47,920 --> 00:47:52,960 تو فہرست مائنس کا استعمال کرتے ہوئے کرنے کی کوشش کریں. 581 00:47:52,960 --> 00:47:57,000 اور یہ 10 لائنیں گزشتہ کی فہرست، آپ کی فہرست کے ساتھ کے ارد گرد ایک تھوڑا سا ادا کر سکتے ہیں. 582 00:47:57,000 --> 00:48:02,330 آپ کی فہرست، فہرست کر سکتے ہیں - آپ کو بھی فہرست 8 فہرست کی طرح ایک نمبر دے کر سکتے ہیں، 583 00:48:02,330 --> 00:48:07,500 اور یہ 8 لائن کے ارد گرد 10 لائنیں کی فہرست گا. 584 00:48:07,500 --> 00:48:10,290 تمہیں دیکھ کر اور یہاں کیا ہو رہا ہے آپ کو ایک اور اگر آسان ہے کر سکتے ہیں. 585 00:48:10,290 --> 00:48:13,980 اگر آپ کو CS50 چٹٹانوں میں ٹائپ کریں، اسے باہر پرنٹ آپ ایک A. " 586 00:48:13,980 --> 00:48:16,530 ورنہ باہر پرنٹ "تم ایک D." 587 00:48:16,530 --> 00:48:23,770 مایوس کن شہر ہے. ٹھیک ہے. جی ہاں؟ 588 00:48:23,770 --> 00:48:26,730 >> [ڈینیل]، تو جب میں بغیر واوین کے CS50 پتھروں کر کرنے کی کوشش کی 589 00:48:26,730 --> 00:48:29,290 اس کا کہنا ہے کہ "تم ایک D." 590 00:48:29,290 --> 00:48:32,560 میں نے کی قیمت درج کرنے کی ضرورت ہے یہ کام کرنے کے لئے حاصل کرنے کے لئے، ایسا کیوں ہے؟ 591 00:48:32,560 --> 00:48:38,490 >> جی ہاں. یہ پتہ چلا ہے کہ جب - یہ ایک اور مذاق تھوڑا tidbit ہے - 592 00:48:38,490 --> 00:48:47,900 ، جب آپ اس پروگرام چلاتے ہیں، اگر ہم اسے چلانے اور ہم CS50 چٹٹانوں میں ٹائپ 593 00:48:47,900 --> 00:48:50,800 جیسا کہ ڈینیل کہا کہ انہوں نے کیا تھا، اور تمہیں مارا درج کریں 594 00:48:50,800 --> 00:48:52,870 یہ اب بھی کا کہنا ہے کہ ہم نے ایک D. حاصل 595 00:48:52,870 --> 00:48:55,580 اور سوال یہ کیوں ہے؟ 596 00:48:55,580 --> 00:49:02,120 اور یہ پتہ چلا ہے کہ ہمارے دونوں ٹرمینل اور GDB ان دو الگ الگ دلائل کے طور پر تجزیہ. 597 00:49:02,120 --> 00:49:04,800 جب وہاں ایک خلا ہے، کہ تقاضا ہے کیونکہ 598 00:49:04,800 --> 00:49:08,730 پہلی دلیل ختم ہو گئی، اگلے دلیل یہ ہے شروع کرنے کے بارے میں ہے. 599 00:49:08,730 --> 00:49:13,260 دو حصوں میں لوگوں کو جمع کرنے کا طریقہ، یا افسوس ہے، ایک دلیل میں 600 00:49:13,260 --> 00:49:18,510 واوین کے استعمال کرنے کے لئے ہے. 601 00:49:18,510 --> 00:49:29,560 تو اب، اگر ہم اس کی قیمت درج کرنے میں ڈال دیا اور اس کو دوبارہ چلائیں، ہم ایک A. 602 00:49:29,560 --> 00:49:38,780 تو recap، کوئی کوٹس، CS50 اور پتھروں کو دو الگ الگ دلائل کے طور پر تجزیہ کر رہے ہیں. 603 00:49:38,780 --> 00:49:45,320 کی قیمت درج کرنے کے ساتھ، یہ ایک مکمل طور پر دلیل کے طور پر تصریف ہے. 604 00:49:45,320 --> 00:49:53,070 >> ہم ایک توڑ مقام کے ساتھ اس کو دیکھ سکتے ہیں. 605 00:49:53,070 --> 00:49:54,920 اب تک ہم نے ہمارے پروگرام چل رہا ہے، اور یہ ہے چل رہا ہے 606 00:49:54,920 --> 00:49:58,230 یا تو غلطی یا ہٹ میں ایک خامی seg تک 607 00:49:58,230 --> 00:50:05,930 یا جب تک اس سے باہر ہے اور تمام بالکل ٹھیک ہو گیا ہے. 608 00:50:05,930 --> 00:50:08,360 یہ ضروری نہیں ہے، کبھی کبھی سب سے زیادہ مفید بات کی وجہ 609 00:50:08,360 --> 00:50:11,840 آپ کو اپنے پروگرام میں ایک خامی ہے، لیکن یہ انقطاع کی غلطی کی وجہ سے نہیں ہے. 610 00:50:11,840 --> 00:50:16,950 روکنے پروگرام یا اس طرح کچھ بھی نہیں جس کے نتیجے میں ہے. 611 00:50:16,950 --> 00:50:20,730 آپ کے پروگرام کو روکنا کسی خاص نقطہ پر GDB راستہ 612 00:50:20,730 --> 00:50:23,260 توڑ مقام مقرر ہے. 613 00:50:23,260 --> 00:50:26,520 تم نے ایک تقریب کے نام پر توڑ مقام کی ترتیب کی طرف سے یا تو کر سکتے ہیں 614 00:50:26,520 --> 00:50:30,770 یا آپ کے کوڈ کا ایک مخصوص لائن پر ایک توڑ مقام مقرر کر سکتے ہیں. 615 00:50:30,770 --> 00:50:34,450 میں تقریب کے نام پر breakpoints مقرر کرنا چاہتے ہیں، کیونکہ - آسان یاد، 616 00:50:34,450 --> 00:50:37,700 اور اگر آپ واقعی میں جاؤ اور تھوڑا سا اپنے منبع کوڈ کو تبدیل 617 00:50:37,700 --> 00:50:42,020 تو آپ کا توڑ مقام اپنا کوڈ کے اندر اندر ایک ہی جگہ پر اصل میں رہیں گے. 618 00:50:42,020 --> 00:50:44,760 جبکہ اگر آپ لائن نمبرز کا استعمال کرتے ہوئے کر رہے ہیں، اور لائن نمبرز تبدیل 619 00:50:44,760 --> 00:50:51,740 کیونکہ آپ کچھ کوڈ شامل یا حذف، تو آپ breakpoints تمام پوری طرح سے کر رہے ہیں مصیبت میں. 620 00:50:51,740 --> 00:50:58,590 سب سے زیادہ عام چیزیں مجھے کیا کرنا میں سے ایک اہم تقریب پر توڑ مقام مقرر کیا گیا ہے. 621 00:50:58,590 --> 00:51:05,300 اکثر میں GDB بوٹ کریں گے، میں ب اہم ٹائپ کریں، درج کریں مارا، اور کریں گے کہ ایک توڑ مقام مقرر کریں گے 622 00:51:05,300 --> 00:51:10,630 اہم تقریب ہے جس میں صرف کا کہنا ہے کہ، "پروگرام جیسے ہی تم چلنا شروع روک دیں، 623 00:51:10,630 --> 00:51:17,960 اور اس طرح، جب میں اس کے ساتھ، کا کہنا ہے کہ، CS50 پتھروں کے طور پر میرا پروگرام چلائیں دو دلائل 624 00:51:17,960 --> 00:51:24,830 درج کریں مارا یہ بنیادی کام ہو جاتا ہے اور یہ بہت پہلی سطر میں رک جاتا ہے، 625 00:51:24,830 --> 00:51:30,620 ٹھیک ہے اس سے پہلے کہ یہ strcmp تقریب کی تشخیص کرتا ہے. 626 00:51:30,620 --> 00:51:34,940 >> چونکہ میں روک دیئے گئے ہوں، اب میں شروع کر سکتے ہیں کے ارد گرد mucking اور دیکھ کر کیا ہو رہا ہے 627 00:51:34,940 --> 00:51:40,250 مختلف متغیر ہے جو اپنے پروگرام میں منظور ہیں میں سے سب کے ساتھ. 628 00:51:40,250 --> 00:51:43,670 یہاں میں argc پرنٹ اور دیکھو کیا ہو رہا ہے کر سکتے ہیں. 629 00:51:43,670 --> 00:51:50,030 دیکھو کہ argc 3 ہے، کیونکہ یہ اس میں 3 مختلف اقدار کی ہے. 630 00:51:50,030 --> 00:51:54,060 یہ اس پروگرام کا نام ہے، یہ پہلی دلیل اور دوسری دلیل مل گیا ہے. 631 00:51:54,060 --> 00:52:09,330 ہم ان argv دیکھ کر پرنٹ کر سکتے ہیں [0]، argv [1]، اور argv [2]. 632 00:52:09,330 --> 00:52:12,030 تو اب تم کیوں اس strcmp کال کرنے میں ناکام ہو رہا ہے بھی دیکھ سکتے ہیں، 633 00:52:12,030 --> 00:52:21,650 کیونکہ تم نے دیکھا ہے کہ یہ تقسیم نے دو الگ الگ دلائل میں CS50 اور پتھروں. 634 00:52:21,650 --> 00:52:27,250 اس وقت، ایک بار تم نے توڑ مقام متاثر کیا ہے، آپ کو اپنے پروگرام کے ذریعے قدم جاری رکھ سکتے ہیں 635 00:52:27,250 --> 00:52:32,920 لائن کی طرف سے لائن، اپنے پروگرام کو دوبارہ شروع کرنے کے خلاف ہے. 636 00:52:32,920 --> 00:52:35,520 اگر ایسا ہے تو آپ کو اپنے پروگرام کو دوبارہ شروع کرنا نہیں چاہتے ہیں یہاں سے جاری، 637 00:52:35,520 --> 00:52:41,970 آپ کو آگے کمانڈ کا استعمال اور چلتی رہیں پروگرام کے آخر تک کر سکتے ہیں. 638 00:52:41,970 --> 00:52:45,010 جیسا کہ اسے یہاں کیا. 639 00:52:45,010 --> 00:52:54,880 تاہم، اگر میں پروگرام، CS50 پتھر کو دوبارہ شروع، یہ میرا توڑ مقام دوبارہ مار دیتی ہے، 640 00:52:54,880 --> 00:52:59,670 اور اس وقت، اگر میں صرف پروگرام کے باقی کے ذریعے پورے راستے نہیں چاہتے ہو، 641 00:52:59,670 --> 00:53:08,040 میں اگلے کمانڈ کا استعمال کر سکتے ہیں، جس میں (ن) کے ساتھ بھی abbreviate. 642 00:53:08,040 --> 00:53:12,960 اور پروگرام لائن کے ذریعے اس لائن کی طرف سے عہدہ چھوڑ دیں گے. 643 00:53:12,960 --> 00:53:17,530 تو کیا تم دیکھتے کے طور پر چیزوں کو پھانسی، کے طور پر متغیر تبدیلی، کے طور پر چیزوں کو اپ ڈیٹ کرنے کے لئے کر سکتے ہیں. 644 00:53:17,530 --> 00:53:21,550 جو بہت اچھی ہے. 645 00:53:21,550 --> 00:53:26,570 دیگر ٹھنڈی چیز ہے، بلکہ ایک ہی حکم ہے اور اور اس سے زیادہ سے زیادہ ایک بار پھر دہرا سے 646 00:53:26,570 --> 00:53:30,670 اگر آپ نے ابھی درج کریں مارا - لہذا آپ کو یہاں دیکھ کر میں کچھ میں ٹائپ نہیں کیا ہے - 647 00:53:30,670 --> 00:53:33,780 اگر میں مارا درج کریں، یہ گزشتہ کمانڈ اعادہ کروں گا، 648 00:53:33,780 --> 00:53:36,900 یا پچھلے GDB حکم ہے کہ میں صرف اندر ڈال 649 00:53:36,900 --> 00:53:56,000 میں مارنے درج کریں اور لائن کی طرف سے اپنے کوڈ کی لائن کے ذریعے نکلنے رکھیں گے کر سکتے ہیں. 650 00:53:56,000 --> 00:53:59,310 میں تم لوگ دوسری چھوٹی گاڑی کے پروگراموں کی جانچ پڑتال کے ساتھ ساتھ جانے کے لئے حوصلہ افزائی کریں گے. 651 00:53:59,310 --> 00:54:01,330 ہم نے ان تمام لوگوں کو آج کے حصے میں کے ذریعے حاصل کرنے کا وقت نہیں ہے. 652 00:54:01,330 --> 00:54:05,890 ماخذ کوڈ وہاں ہے، لہذا آپ کو دیکھو کیا ہو رہا ہے کی طرح کر سکتے ہیں 653 00:54:05,890 --> 00:54:07,730 مناظر اگر آپ واقعی پھنس جاتے ہیں کے پیچھے، 654 00:54:07,730 --> 00:54:11,940 لیکن کم از کم، صرف GDB بوٹنگ عمل، 655 00:54:11,940 --> 00:54:13,940 پروگرام چلا رہا ہے جب تک کہ وہ تم پر ٹوٹ جاتا ہے، 656 00:54:13,940 --> 00:54:18,260 backtrace ہو رہی ہے، باہر figuring کیا کام حادثے میں تھا، 657 00:54:18,260 --> 00:54:24,450 کیا لائن پر تھا، اور کچھ متغیر اقدار چھپائی، 658 00:54:24,450 --> 00:54:30,140 صرف اس لئے آپ کو اس کے لئے ایک احساس ملے، کیونکہ اس میں اس کا تم سے آگے جا واقعی میں مدد ملے گی. 659 00:54:30,140 --> 00:54:36,340 اس وقت، ہم GDB سے باہر چھوڑ جا رہے ہیں جو آپ کو چھوڑ کا استعمال کرتے ہوئے یا صرف ق. 660 00:54:36,340 --> 00:54:40,460 اگر آپ پروگرام اب بھی چل کے وسط میں ہے، اور اس سے باہر نہیں ہے، 661 00:54:40,460 --> 00:54:43,510 کیا آپ ہمیشہ سے پوچھیں گے، "کیا آپ کو اس بات کا یقین کر لیں کہ آپ واقعی چھوڑ کرنا چاہتے ہیں؟" 662 00:54:43,510 --> 00:54:48,770 تم ہاں مار کر سکتے ہیں. 663 00:54:48,770 --> 00:54:55,250 >> اب ہم اگلے مسئلہ ہے ہم نے، جو کہ بلی پروگرام ہے کو دیکھنے کے لئے جا رہے ہیں. 664 00:54:55,250 --> 00:54:59,880 اگر آپ کو منتقل کیا جا رہا ہے اور پائپ مختصر دیکھتے تم نے دیکھا، کہ ٹومی اس پروگرام کا استعمال کرتا ہے. 665 00:54:59,880 --> 00:55:07,540 ہے جو بنیادی طور پر سکرین پر ایک فائل کی تمام پیداوار پرنٹ. 666 00:55:07,540 --> 00:55:12,660 تو اگر میں بلی چلاتے ہیں، اصل میں ایک بلٹ میں پروگرام ہے آلات، 667 00:55:12,660 --> 00:55:16,860 اور اگر آپ Macs ہے آپ کو آپ میک پر یہ بھی کرتے ہیں، اگر آپ کو ٹرمینل کھول کر سکتے ہیں. 668 00:55:16,860 --> 00:55:25,630 اور ہم - بلی دو، کا کہنا ہے کہ، cp.c، اور مارا درج کریں. 669 00:55:25,630 --> 00:55:29,640 اگر تو اس نے یہ کیا ہے، ہم نے تھوڑا سا سکرال کریں اور جہاں ہم لائن دیکھ کر بھاگ گیا، 670 00:55:29,640 --> 00:55:40,440 یا جہاں ہم بلی کمانڈ میں بھاگ گیا، یہ لفظی صرف ہمارے سکرین پر طباعت cp.c کے مندرجات ہیں. 671 00:55:40,440 --> 00:55:44,140 ہم اسے دوبارہ چلائیں اور آپ کو ایک سے زیادہ فائلوں میں ڈال مل کر کر سکتے ہیں کر سکتے ہیں. 672 00:55:44,140 --> 00:55:49,880 تو آپ کو بلی cp.c کرنا، اور تو ہم cat.c فائل بھی سلسلہ بندی کرنا کر سکتے ہیں کر سکتے ہیں، 673 00:55:49,880 --> 00:55:53,250 جو پروگرام ہم لکھ رہے ہیں ہے، 674 00:55:53,250 --> 00:55:58,140 اور یہ دونوں فائلوں کو واپس پرنٹ ہمارے سکرین کی حمایت کریں گے. 675 00:55:58,140 --> 00:56:05,490 اگر ایسا ہے تو ہم نے تھوڑا سا سکرال، ہم دیکھتے ہیں کہ ہم اس بلی cp.c، cat.c جب بھاگ گیا، 676 00:56:05,490 --> 00:56:17,110 سب سے پہلے یہ CP فائل طباعت، اور تو اس کے نیچے، یہ cat.c فائل طباعت ٹھیک ہے یہاں ذیل. 677 00:56:17,110 --> 00:56:19,650 ہم یہ تو صرف اپنے پاؤں گیلے حاصل کرنے کے لئے استعمال کرنے کے لئے جا رہے ہیں. 678 00:56:19,650 --> 00:56:25,930 سادہ ٹرمینل پر پرنٹنگ کے ساتھ کے ارد گرد کھیلیں دیکھو، وہ کس طرح کام کرتا ہے. 679 00:56:25,930 --> 00:56:39,170 اگر تم لوگ gedit cat.c کے ساتھ کھول مارا، درج کریں، 680 00:56:39,170 --> 00:56:43,760 کیا آپ پروگرام ہے کہ ہم لکھنے کے بارے میں دیکھ سکتے ہیں. 681 00:56:43,760 --> 00:56:48,980 تاکہ ہم اس اچھی بوائلر پلیٹ شامل کر دیا ہے، ہم وقت کہ ٹائپ خرچ کرنے کی ضرورت نہیں ہے. 682 00:56:48,980 --> 00:56:52,310 ہم بھی دلائل کی تعداد کو چیک کرنے کے لیے اندر منظور 683 00:56:52,310 --> 00:56:56,910 ہم ایک اچھا استعمال پیغام پرنٹ کریں. 684 00:56:56,910 --> 00:57:00,950 >> اس طرح کی بات کہ پھر ہم طرح کیا گیا ہے کے بارے میں بات کر ہے، 685 00:57:00,950 --> 00:57:04,490 یہ تقریبا پٹھوں میموری کی طرح ہے. 686 00:57:04,490 --> 00:57:07,190 چیزیں اسی طرح کر رہے رکھنے کے لئے یاد رکھیں 687 00:57:07,190 --> 00:57:11,310 اور ہمیشہ مددگار پیغام کی کسی قسم چھپائی 688 00:57:11,310 --> 00:57:17,670 تاکہ لوگوں کو معلوم ہے کہ کس طرح آپ کے پروگرام کو چلانے کے لئے. 689 00:57:17,670 --> 00:57:21,630 بلی کے ساتھ، یہ بہت آسان ہے، ہم صرف مختلف دلائل کے ذریعے جانے کے لئے جا رہے ہیں 690 00:57:21,630 --> 00:57:24,300 جو کہ ہمارے پروگرام منظور کیا گیا اور ہم نے پرنٹ جا رہے ہیں 691 00:57:24,300 --> 00:57:29,950 ایک وقت میں ایک کی سکرین پر ان کے باہر مواد. 692 00:57:29,950 --> 00:57:35,670 کے لئے فائلوں کو پردے پر پرنٹ کرنے کے لئے، ہم بہت ہی کچھ کرنے کے لئے جا رہے ہیں 693 00:57:35,670 --> 00:57:38,120 جو ہم نے کے لئے گئے تمام سوالات کے اختتام پر کیا. 694 00:57:38,120 --> 00:57:45,350 کوئز، کہ اس پروگرام کرایہ کے آخر میں، ہم نے ایک فائل کو کھولنے کے تھے، 695 00:57:45,350 --> 00:57:48,490 اور پھر ہم نے اس سے پرنٹ کرنے کے لئے تھا. 696 00:57:48,490 --> 00:57:54,660 اس صورت میں، ہم نے ایک فائل کو کھولنے کے جا رہے ہیں، اور ہم اس سے بجائے پڑھنے جا رہے ہیں. 697 00:57:54,660 --> 00:58:00,630 اس کے بعد ہم نے کی بجائے ایک فائل کو پرنٹ کرنے کے لئے، جا رہے ہیں، ہم پردے پر پرنٹ کرنے کے لئے جا رہے ہیں. 698 00:58:00,630 --> 00:58:05,830 تو سکرین آپ سب printf سے پہلے کیا ہے سے چھپائی. 699 00:58:05,830 --> 00:58:08,290 تو وہ بھی پاگل نہیں ہے. 700 00:58:08,290 --> 00:58:12,190 لیکن ایک فائل کو پڑھنے کے عجیب قسم کا ہے. 701 00:58:12,190 --> 00:58:17,300 یہ تھوڑا سا کے ذریعے ہم ایک وقت میں چلے جائیں گے. 702 00:58:17,300 --> 00:58:20,560 اگر تم لوگ آپ کے کوئز، 33 مسئلہ کہ گزشتہ مسئلہ میں واپس جاتے ہیں، 703 00:58:20,560 --> 00:58:27,280 پہلی سطر ہے کہ ہم یہاں کیا کرنے جا رہے ہیں، فائل کھولنے، کیا ہم وہاں کیا اسی طرح ہے. 704 00:58:27,280 --> 00:58:36,370 سٹیلا تو، کی طرح، جب ہم ایک فائل کو کھولنے کے اس لائن کو نظر آتی ہے؟ 705 00:58:36,370 --> 00:58:47,510 [سٹیلا] کیپٹل فائل * فائل - >> ٹھیک ہے. >> - fopen کے برابر ہے. >> جی ہاں. 706 00:58:47,510 --> 00:58:55,980 جو اس صورت میں ہے؟ یہ تبصرہ میں ہے. 707 00:58:55,980 --> 00:59:06,930 >> یہ تبصرہ میں ہے؟ argv [i] اور R؟ 708 00:59:06,930 --> 00:59:11,300 بالکل ٹھیک ہے. >> ٹھیک ہے. تو سٹیلا بالکل صحیح ہے. 709 00:59:11,300 --> 00:59:13,720 یہ وہی ہے جو لائن کی طرح لگتا ہے. 710 00:59:13,720 --> 00:59:19,670 ہم ایک فائل ندی متغیر کو حاصل کرنے کے لئے، ایک فائل * میں محفوظ جا رہے ہیں، تو تمام بڑے حروف 711 00:59:19,670 --> 00:59:25,720 فائل فائل، *، اور اس متغیر کے نام پر ہو جائے گا. 712 00:59:25,720 --> 00:59:32,250 جو ہمیں پسند ہے ہم نے اسے فون کر سکتا ہے. ہم یہ first_file، یا file_i کہہ سکتے ہیں، ہم جو کچھ بھی کرنا چاہتے ہیں. 713 00:59:32,250 --> 00:59:37,590 اور اس کے بعد کی فائل کے نام کو کمانڈ لائن پر اس پروگرام میں منظور کیا گیا تھا. 714 00:59:37,590 --> 00:59:44,450 تو یہ argv میں محفوظ ہے [میں] اور پھر ہم پڑھ کے موڈ میں اس فائل کو کھولنے کے لئے جا رہے ہیں. 715 00:59:44,450 --> 00:59:48,100 اب جب کہ ہم نے فائل کھولی ہے، بات یہ ہے کہ ہم ہمیشہ یاد ہے کیا ہے 716 00:59:48,100 --> 00:59:52,230 ہم نے ایک فائل جب بھی کھول لیا ہے؟ بند کرو. 717 00:59:52,230 --> 00:59:57,220 تو Missy، ہم ایک فائل کو کس طرح بند کر سکتا ہوں؟ 718 00:59:57,220 --> 01:00:01,020 [Missy] fclose (فائل) >> fclose (فائل). بالکل. 719 01:00:01,020 --> 01:00:05,340 بہت اچھا ہے. ٹھیک ہے. اگر ہم اس پر نظر تبصرہ یہاں، 720 01:00:05,340 --> 01:00:11,940 اس کا کہنا ہے کہ، "اوپن argv [i] اور اس کے مندرجات کو stdout پر پرنٹ کریں." 721 01:00:11,940 --> 01:00:15,460 >> سٹینڈرڈ ایک عجیب نام ہے. Stdout صرف یہ کہہ رہا ہمارا راستہ ہے 722 01:00:15,460 --> 01:00:22,880 ہم ٹرمینل پر پرنٹ کرنا چاہتے ہیں، ہم اسے معیاری پیداوار کے سلسلے میں پرنٹ کرنا چاہتے ہیں. 723 01:00:22,880 --> 01:00:26,450 ہم نے اس تبصرہ سے چھٹکارا اصل میں یہاں حاصل کر سکتے ہیں. 724 01:00:26,450 --> 01:00:36,480 میں اس کی کاپی کرنے کے لئے اور اس کے بعد ہے کہ ہم نے کیا کیا پیسٹ جا رہا ہوں. 725 01:00:36,480 --> 01:00:41,290 اس وقت، اب ہم بٹ کی طرف سے فائل سا پڑھا ہے. 726 01:00:41,290 --> 01:00:46,300 ہم نے پڑھنے فائلوں کے طریقوں میں سے ایک جوڑے پر بحث کی ہے. 727 01:00:46,300 --> 01:00:51,830 کون اپنے پسندیدہ اب تک ہیں؟ 728 01:00:51,830 --> 01:00:57,960 کون طریقوں تم نے دیکھا ہے یا ہے، آپ فائلوں کو پڑھنے کے لئے یاد رکھیں؟ 729 01:00:57,960 --> 01:01:04,870 [ڈینیل] fread؟ fread >>؟ تو fread سے ایک ہے. جمی، آپ کو کسی بھی دوسروں کو جانتے ہیں؟ 730 01:01:04,870 --> 01:01:12,150 [جمی] نمبر >> ٹھیک ہے. نہیں. شارلٹ؟ الیگزینڈر؟ کوئی دوسروں؟ ٹھیک ہے. 731 01:01:12,150 --> 01:01:20,740 تو دوسرے ہیں fgetc ہیں، ایک ہے کہ ہم نے ایک بہت استعمال کریں گے. 732 01:01:20,740 --> 01:01:26,410 بھی fscanf، تم لوگ یہاں ایک نمونہ دیکھ؟ 733 01:01:26,410 --> 01:01:29,170 وہ سب F ساتھ شروع کرتے ہیں. ایک فائل کے ساتھ کیا کرنے کے لئے کچھ ہے. 734 01:01:29,170 --> 01:01:35,260 آمدید fread ہے، fgetc، fscanf. یہ پڑھنے کے افعال میں سے سب. 735 01:01:35,260 --> 01:01:49,120 لکھ ہم fwrite ہے، ہم fgetc کے بجائے fputc ہے. 736 01:01:49,120 --> 01:01:58,250 ہم نے بھی fprintf جیسا کہ ہم کوئز پر دیکھا ہے. 737 01:01:58,250 --> 01:02:01,680 چونکہ یہ ایک ایسا مسئلہ ہے جس ميں ایک فائل سے پڑھنے ہے، 738 01:02:01,680 --> 01:02:04,940 ہم ان تین کے افعال میں سے ایک کو استعمال کرنے کے لئے جا رہے ہیں. 739 01:02:04,940 --> 01:02:10,890 ہم ان افعال کو یہاں استعمال نہیں کرنے جا رہے ہیں. 740 01:02:10,890 --> 01:02:14,880 یہ کام کرتا ہے تمام معیاری لائبریری I / O میں پائے جاتے ہیں. 741 01:02:14,880 --> 01:02:17,510 تو اگر آپ کو اس پروگرام کے سب سے اوپر کی طرف دیکھو، 742 01:02:17,510 --> 01:02:24,110 آپ دیکھیں گے کہ ہم نے پہلے سے ہی معیاری لائبریری I / O کے لئے ہیڈر فائل شامل کر دیا ہے کر سکتے ہیں. 743 01:02:24,110 --> 01:02:27,120 اگر ہم معلوم کرنا چاہتے ہیں جو ایک ہم استعمال کرنا چاہتے ہیں، 744 01:02:27,120 --> 01:02:29,690 ہم نے ہمیشہ انسان صفحات کھول سکتے ہیں. 745 01:02:29,690 --> 01:02:34,350 تو ہم انسان stdio ٹائپ کر سکتے ہیں 746 01:02:34,350 --> 01:02:43,180 اور سی میں stdio ان پٹ اور پیداوار کے افعال کے بارے میں تمام پڑھنے 747 01:02:43,180 --> 01:02:49,870 اور ہم نے پہلے سے ہی اوہ، دیکھو دیکھ سکتے ہیں. یہ fgetc ذکر کر رہا ہے، یہ fputc ذکر ہے. 748 01:02:49,870 --> 01:02:57,220 تو آپ نے تھوڑا سا ڈرل اور کو دیکھنے کے کر سکتے ہیں، کا کہنا ہے کہ، fgetc 749 01:02:57,220 --> 01:03:00,060 اور اس شخص کے صفحے کو دیکھو. 750 01:03:00,060 --> 01:03:03,430 تم نے دیکھا کہ یہ دوسرے کے افعال میں سے ایک مکمل جھوبڈ کے ساتھ جاتا ہے کر سکتے ہیں: 751 01:03:03,430 --> 01:03:12,640 fgetc، fgets، getc، getchar، ہو جاتا ہے، ungetc، اور حروف اور ڈور کی اس کے ان پٹ. 752 01:03:12,640 --> 01:03:19,180 تو یہ ہے کہ ہم کس طرح معیاری ان پٹ سے فائلوں سے حروف اور ڈور میں پڑھتے ہیں، 753 01:03:19,180 --> 01:03:21,990 جو صارف کی طرف سے بنیادی طور پر ہے. 754 01:03:21,990 --> 01:03:24,780 اور یہ ہے کہ ہم کس طرح اس کے اصل C. میں 755 01:03:24,780 --> 01:03:30,850 تو یہ GetString اور GetChar افعال کا استعمال کرتے ہوئے نہیں ہے 756 01:03:30,850 --> 01:03:36,840 کہ ہم CS50 لائبریری سے استعمال کیا ہے. 757 01:03:36,840 --> 01:03:39,710 ہم طریقوں میں سے ایک جوڑے میں اس مسئلہ پر کیا کرنے جا رہے ہیں 758 01:03:39,710 --> 01:03:43,430 تاکہ آپ کو کرنے کے دو مختلف طریقوں سے دیکھ سکتے ہیں. 759 01:03:43,430 --> 01:03:48,490 دونوں fread تقریب ہے کہ ڈینیل کا ذکر کیا اور fgetc اچھا ایسا کرنے کے طریقے ہیں. 760 01:03:48,490 --> 01:03:53,790 مجھے لگتا ہے کہ fgetc تھوڑا آسان ہے، کیونکہ یہ صرف ہے، جیسا کہ تم نے دیکھا، 761 01:03:53,790 --> 01:03:59,660 ایک دلیل، فائل، * کہ ہم کردار سے پڑھنے کی کوشش کر رہے ہیں، 762 01:03:59,660 --> 01:04:02,740 اور اس کی واپسی قیمت ایک int ہے. 763 01:04:02,740 --> 01:04:05,610 اور یہ تھوڑا مبہم، صحیح ہے؟ 764 01:04:05,610 --> 01:04:11,450 >> کیونکہ ہم نے ایک کردار ہو رہے ہیں، تو یہ واپسی کیوں نہیں ایک چار ہے؟ 765 01:04:11,450 --> 01:04:18,700 تم لوگ کیوں یہ ایک چار واپس نہیں ہو سکتی ہے پر کوئی خیال ہے؟ 766 01:04:18,700 --> 01:04:25,510 [Missy جوابات، unintelligible] جی ہاں >>. تو Missy بالکل صحیح ہے. 767 01:04:25,510 --> 01:04:31,570 اگر یہ ASCII ہے، تو اس عددی ایک حقیقی چار نقشے سکتا ہے. 768 01:04:31,570 --> 01:04:33,520 ASCII کردار ہو سکتے ہیں، اور یہ ٹھیک ہے. 769 01:04:33,520 --> 01:04:36,220 یہی ہے کیا ہو رہا ہے. 770 01:04:36,220 --> 01:04:39,190 ہم ایک int کا استعمال کرتے ہوئے صرف کیونکہ یہ زیادہ بٹس ہے رہے ہیں. 771 01:04:39,190 --> 01:04:44,750 یہ حروف سے بڑا ہے، ہمارے چار میں صرف 8 بٹس ہے، کہ ہماری 32 بٹ مشینیں 1 بائٹ. 772 01:04:44,750 --> 01:04:48,520 اور ایک int علاقے کے تمام 4 'بائٹس مالیت ہے. 773 01:04:48,520 --> 01:04:50,940 اور یہ پتہ چلا ہے کہ طرح fgetc کام 774 01:04:50,940 --> 01:04:53,940 اگر ہم اپنے مختصر میں اس آدمی کو صفحے کو تھوڑا سا میں ذیل میں سکرال، 775 01:04:53,940 --> 01:05:05,000 پورے راستے ذیل میں سکرال. یہ پتہ چلا ہے کہ وہ نامی اس خاص مسل اختتام قیمت کا استعمال کرتے ہیں. 776 01:05:05,000 --> 01:05:09,640 یہ fgetc تقریب کی واپسی کی قیمت کے طور پر ایک خاص مسلسل ہے 777 01:05:09,640 --> 01:05:14,570 آپ کو فائل کے آخر جب بھی مارا یا اگر آپ کو کوئی غلطی ملتی 778 01:05:14,570 --> 01:05:18,170 اور یہ پتہ چلا ہے کہ مسل اختتام کے ساتھ ان موازنہ کو مناسب طریقے سے کرنا، 779 01:05:18,170 --> 01:05:24,060 آپ کو ایک int میں معلومات کی اضافی رقم ہے جو کہ آپ چاہتے ہیں 780 01:05:24,060 --> 01:05:28,420 ایک چار متغیر کا استعمال کرتے ہوئے کی مخالفت کی. 781 01:05:28,420 --> 01:05:32,130 اگرچہ fgetc مؤثر طریقے سے ایک فائل سے ایک کردار ہو رہی ہے، 782 01:05:32,130 --> 01:05:38,450 آپ کو یاد ہے کہ یہ ایسی چیز ہے جس قسم int آپ کو واپس آ رہا ہے کرنا چاہتے ہیں. 783 01:05:38,450 --> 01:05:41,360 اس نے کہا کہ، یہ کافی استعمال کرنے کے لئے آسان ہے. 784 01:05:41,360 --> 01:05:44,960 یہ ہمیں ایک کردار دینے جا رہا ہے، تو ہم سب پر واجب ہے فائل پوچھتے رہتے، 785 01:05:44,960 --> 01:05:48,440 "مجھے اگلے کردار دے دو، مجھے اگلے کردار دے، آپ کے وزٹرز کا ریکارڈ رکھا اگلے کردار دے، 786 01:05:48,440 --> 01:05:51,400 جب تک ہم فائل کے آخر میں حاصل کرنے کے لئے. 787 01:05:51,400 --> 01:05:54,730 اور ایک کردار میں ہماری فائل سے ایک وقت میں ھیںچو گا، 788 01:05:54,730 --> 01:05:56,250 اور ہم پھر ہم نے اس کے ساتھ جو بھی پسند کر سکتے ہیں. 789 01:05:56,250 --> 01:06:00,160 ہم اسے جمع کر سکتے ہیں، ہم اسے ایک تار میں اضافہ، ہم اسے پرنٹ کر سکتے ہیں کر سکتے ہیں. 790 01:06:00,160 --> 01:06:04,630 اس کے کسی بھی کیا. 791 01:06:04,630 --> 01:06:09,600 >> ، واپس Zooming اور ہماری cat.c پروگرام واپس جا 792 01:06:09,600 --> 01:06:16,170 اگر ہم fgetc کو استعمال کرنے کے لئے جا رہے ہیں، 793 01:06:16,170 --> 01:06:21,710 ہم کوڈ کا یہ اگلی لائن کس طرح رجوع ہو سکتا ہے؟ 794 01:06:21,710 --> 01:06:26,020 ہم استعمال کرنے کے لئے جا رہے ہیں - fread تھوڑا سا مختلف کچھ کروں گا. 795 01:06:26,020 --> 01:06:32,600 اور اس وقت، ہم صرف fgetc ایک وقت میں ایک کردار حاصل کرنے کے لئے استعمال جا رہے ہیں. 796 01:06:32,600 --> 01:06:40,910 ایک مکمل فائل پر عملدرآمد کرنے کے لئے، ہمیں کیا کرنا ہے کر سکتے ہیں؟ 797 01:06:40,910 --> 01:06:44,030 کتنے حروف کو ایک فائل میں ہیں؟ 798 01:06:44,030 --> 01:06:47,390 بہت ہیں. تو آپ شاید ایک حاصل کرنے کے لئے کرنا چاہتے ہیں 799 01:06:47,390 --> 01:06:49,860 اور پھر ایک ہو جاؤ اور دوسرے اور دوسرے حاصل ہے. 800 01:06:49,860 --> 01:06:53,330 الگورتھم کس قسم کی کیا آپ کو لگتا ہے کہ ہم یہاں استعمال کرنے کے لئے ہو سکتا ہے ہے؟ 801 01:06:53,330 --> 01:06:55,470 کس طرح کی - [الیگزینڈر] لوپ کے لئے ایک؟ بالکل ٹھیک ہے. >> 802 01:06:55,470 --> 01:06:57,500 لوپ میں سے کچھ کی قسم. 803 01:06:57,500 --> 01:07:03,380 لوپ کے لئے ایک اصل میں اس معاملے میں ہے،. 804 01:07:03,380 --> 01:07:08,620 اور تم کہہ رہے تھے، یہ لگتا ہے کہ آپ پوری فائل پر ایک لوپ چاہتے ہیں، 805 01:07:08,620 --> 01:07:11,820 ایک وقت میں ایک کردار ہو. 806 01:07:11,820 --> 01:07:13,850 کیا کوئی رائے ہوں، اس طرح نظر سکتی ہے؟ 807 01:07:13,850 --> 01:07:22,090 [الیگزینڈر، unintelligible] 808 01:07:22,090 --> 01:07:30,050 >> ٹھیک ہے، بس کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے انگریزی میں بتاو کہ تم کیا کرنے کی کوشش کر رہے ہیں؟ [الیگزینڈر، unintelligible] 809 01:07:30,050 --> 01:07:36,270 تو اس صورت میں، ایسا لگتا ہے ہم صرف پوری فائل پر لوپ کرنے کی کوشش کر رہے ہیں. 810 01:07:36,270 --> 01:07:45,330 [الیگزینڈر] تو میں > کے سائز - 811 01:07:45,330 --> 01:07:49,290 میں فائل کے سائز کے لگتا ہے، ہے نا؟ سائز - we'll صرف اس طرح لکھ. 812 01:07:49,290 --> 01:07:57,470 وقت کے لئے فائل کے سائز کے ہونے کے ناطے، میں + +. 813 01:07:57,470 --> 01:08:04,610 تو یہ پتہ چلا ہے کہ جس طرح سے آپ اس fgetc استعمال کرتے ہیں، اور یہ نیا ہے، 814 01:08:04,610 --> 01:08:10,460 یہ ہے کہ کوئی صرف ایک فائل کے سائز کے حاصل کرنے کے لئے آسان طریقہ ہے 815 01:08:10,460 --> 01:08:16,979 تعمیر ہے کہ تم سے پہلے دیکھا ہے، اس "sizeof" قسم کے ساتھ. 816 01:08:16,979 --> 01:08:20,910 جب ہم اس fgetc تقریب کا استعمال کرتے ہیں، ہم کسی قسم کے شروع کر رہے ہیں 817 01:08:20,910 --> 01:08:29,069 لوپ کے لئے نئے، funky اس میں نحو، جہاں صرف ایک بنیادی انسداد کا استعمال کرتے ہوئے کی بجائے 818 01:08:29,069 --> 01:08:33,920 کردار سے کردار کو جانا ہے، ہم ایک وقت میں ایک کردار ھیںچو جا رہے ہیں، 819 01:08:33,920 --> 01:08:37,120 ایک وقت میں ایک کردار، اور جس طرح سے ہم جانتے ہیں، ہم آخر میں ہیں 820 01:08:37,120 --> 01:08:41,290 ہے جب ہم نہیں حروف کی ایک مخصوص تعداد شمار ہے، 821 01:08:41,290 --> 01:08:49,939 لیکن جب کردار ہم سے نکالنے کہ فائل کے کردار کی خاص اختتام ہے. 822 01:08:49,939 --> 01:08:58,689 تو ہم ایسا کر سکتے ہیں - میں اس چوہدری کہتے ہیں، اور ہم اس کی ابتدا کے لئے جا رہے ہیں 823 01:08:58,689 --> 01:09:08,050 ہماری پہلی فائل سے باہر پہلا کردار حاصل کرنے کے لئے کال کے ساتھ. 824 01:09:08,050 --> 01:09:14,979 تو یہ یہیں حصہ ہے، یہ ایک کردار کی فائل کو باہر نکالنے کے لئے کی جا رہی ہے 825 01:09:14,979 --> 01:09:20,840 اور یہ متغیر چوہدری میں سٹور. 826 01:09:20,840 --> 01:09:25,420 ہم یہ کر رکھنے کے لئے جب تک ہم فائل کے آخر میں حاصل کرنے کے لئے جا رہے ہیں، 827 01:09:25,420 --> 01:09:41,170 جو ہم کردار کے لئے کیا جا رہا ہے کہ خصوصی مسل اختتام کردار کے برابر نہیں جانچ کی طرف سے کرتے ہیں. 828 01:09:41,170 --> 01:09:48,750 اور پھر چوہدری کرنے کے بجائے + +، جس کی قیمت صرف اضافہ کریں گے، 829 01:09:48,750 --> 01:09:52,710 اگر ایسا ہے تو ہم فائل سے باہر A، سرمایہ کا کہنا ہے کہ، پڑھا، 830 01:09:52,710 --> 01:09:56,810 CH + + ہمیں ب دے، اور پھر ہم سی اور پھر ڈی حاصل تھا. 831 01:09:56,810 --> 01:09:59,310 جو واضح طور پر بیان نہیں ہے جو ہم چاہتے ہیں. ہم یہاں کیا کرنا چاہتے ہیں 832 01:09:59,310 --> 01:10:05,830 یہ آخری سا میں ہم فائل سے اگلے کردار حاصل کرنے کے لئے کرنا چاہتی ہے. 833 01:10:05,830 --> 01:10:09,500 >> تو ہم فائل سے اگلے کردار کو کیسے حاصل کر سکتے ہیں؟ 834 01:10:09,500 --> 01:10:13,470 ہم فائل سے کس طرح سب سے پہلے کردار ہے؟ 835 01:10:13,470 --> 01:10:17,200 [Student کی] fgetfile؟ >> fgetc، یا، معاف کرنا، تم بالکل ٹھیک کہہ رہے تھے. 836 01:10:17,200 --> 01:10:20,470 میں نے اسے وہیں غلط ہجے شدہ. تو ہاں. 837 01:10:20,470 --> 01:10:26,240 چوہدری کرنے کے بجائے +، + 838 01:10:26,240 --> 01:10:29,560 ہم صرف fgetc (فائل) پھر فون کرنے جا رہے ہو 839 01:10:29,560 --> 01:10:39,180 اور ہمارے اسی چوہدری متغیر کے نتیجے میں سٹور. 840 01:10:39,180 --> 01:10:43,730 [Student کی سوال، unintelligible] 841 01:10:43,730 --> 01:10:52,390 >> یہ وہ جگہ ہے جہاں یہ فائل * لوگ خاص ہو. 842 01:10:52,390 --> 01:10:59,070 طرح وہ کام کرتے ہیں وہ ہے - جب آپ پہلی بار کھولنے - جب آپ پہلی بار وہ fopen کال کرنے، 843 01:10:59,070 --> 01:11:04,260 فائل * مؤثر طریقے سے فائل کے شروع میں ایک پوائنٹر کے طور پر کام کرتا ہے ہے. 844 01:11:04,260 --> 01:11:12,830 اور پھر ہر وقت آپ کہتے fgetc، یہ فائل کے ذریعے ایک کردار چلتا ہے. 845 01:11:12,830 --> 01:11:23,280 تو جب بھی آپ کو یہ کہتے ہیں، تو آپ کو ایک کردار کی طرف سے فائل پوائنٹر incrementing رہے ہیں. 846 01:11:23,280 --> 01:11:26,210 اور جب آپ دوبارہ fgetc، آپ اسے منتقل دوسرے کردار کر رہے ہیں 847 01:11:26,210 --> 01:11:28,910 اور دوسرے کردار اور دوسرے کردار اور ایک دوسرے کردار. 848 01:11:28,910 --> 01:11:32,030 [Student کی سوال، unintelligible] >> اور that's - جی ہاں. 849 01:11:32,030 --> 01:11:34,810 ہڈ کے تحت اس جادو کی طرح ہے. 850 01:11:34,810 --> 01:11:37,930 تم بس کے ذریعے incrementing رکھنے کے. 851 01:11:37,930 --> 01:11:46,510 اس وقت، آپ کو اصل میں ایک کردار کے ساتھ کام کرنے کے قابل ہیں. 852 01:11:46,510 --> 01:11:52,150 تو ہم یہ کس طرح کی سکرین پر، اب پرنٹ کر سکتے ہیں؟ 853 01:11:52,150 --> 01:11:58,340 ہم اسی printf بات یہ ہے کہ ہم پہلے کرتے تھے کو استعمال کر سکتے ہیں. 854 01:11:58,340 --> 01:12:00,330 کہ ہم تمام سمسٹر کا استعمال کرتے ہوئے. 855 01:12:00,330 --> 01:12:05,450 ہم printf فون کر سکتے ہیں، 856 01:12:05,450 --> 01:12:21,300 اور ہم کردار میں ایسے ہی منتقل کر سکتی ہیں. 857 01:12:21,300 --> 01:12:27,430 بلکہ printf کا استعمال کرتے ہوئے اور اس کی شکل سٹرنگ کرنے سے ایسا کرنے کا ایک اور راستہ ہے، 858 01:12:27,430 --> 01:12:29,490 ہم دوسرے کے افعال میں سے ایک بھی استعمال کر سکتے ہیں. 859 01:12:29,490 --> 01:12:40,090 ہم fputc، جس میں پردے پر ایک کردار پرنٹ کا استعمال کر سکتے ہیں، 860 01:12:40,090 --> 01:12:52,580 کے علاوہ اگر ہم fputc میں نظر آتے ہیں - مجھے تھوڑا سا زوم. 861 01:12:52,580 --> 01:12:56,430 ہم دیکھتے ہیں جو اچھی بات ہے یہ ہے کہ یہ کردار میں لیتا ہے کہ ہم پڑھ fgetc کا استعمال کرتے ہوئے، 862 01:12:56,430 --> 01:13:05,100 لیکن پھر ہم یہ ایک پرنٹ ندی دینا ہے. 863 01:13:05,100 --> 01:13:11,850 ہم putchar تقریب، جو معیار باہر سے براہ راست ڈال دیں گے بھی استعمال کر سکتے ہیں. 864 01:13:11,850 --> 01:13:16,070 تو وہاں مختلف اختیارات ہیں کہ ہم پرنٹنگ کے لئے استعمال کر سکتے ہیں کی ایک پوری چڑھانے ہیں. 865 01:13:16,070 --> 01:13:19,580 وہ معیاری لائبریری I / O میں سب. 866 01:13:19,580 --> 01:13:25,150 جب بھی آپ کو پرنٹ کرنا چاہتے ہیں - تو printf ڈیفالٹ کی طرف سے، ندی باہر خصوصی معیار پر پرنٹ کرنے کے لئے، گا، 867 01:13:25,150 --> 01:13:27,910 جو اس stdout ہے. 868 01:13:27,910 --> 01:13:41,300 تو ہم اس جادو قدر ہے، یہاں stdout کی قسم کے طور پر اس سے رجوع کر سکتے ہیں. 869 01:13:41,300 --> 01:13:48,410 افوہ. باہر نیم وقفہ ڈالو. 870 01:13:48,410 --> 01:13:52,790 >> یہ یہاں نئے، funky معلومات کے بہت کچھ ہے. 871 01:13:52,790 --> 01:13:58,600 اس کی ایک بہت بہت مہاوریدار احساس ہے کہ یہ کوڈ آن ہے میں ہے، 872 01:13:58,600 --> 01:14:05,700 کہ اس طرح لکھا ہے صرف اس لئے کہ یہ صاف ہے، پڑھنے میں آسان پڑھ رہا ہے. 873 01:14:05,700 --> 01:14:11,520 ایسا کرنے کے لئے بہت سے مختلف طریقوں سے، بہت سے مختلف کام کرتا ہے آپ استعمال کر سکتے ہیں ہیں، 874 01:14:11,520 --> 01:14:14,680 لیکن ہم بس سے ان اسی پیٹرن پر عمل کرتے ہیں. 875 01:14:14,680 --> 01:14:20,180 تو اگر آپ کے پاس آ رہے ہیں بار بار اس طرح کا کوڈ دیکھ سکتے نہیں رکھا جائے حیران کرتے ہیں. 876 01:14:20,180 --> 01:14:25,690 ٹھیک ہے. اس وقت ہم نے اس دن کے لئے کو توڑنے کے لئے کی ضرورت ہے. 877 01:14:25,690 --> 01:14:31,300 آنے کے لئے شکریہ. اگر آپ آن لائن ہیں دیکھ کے لئے شکریہ. اور ہم اگلے ہفتے آپ کو نظر آئے گا. 878 01:14:31,300 --> 01:14:33,890 [CS50.TV]