[Powered by Google Translate] [5 دفعہ: کم آرام دہ اور پرسکون] [نیٹ Hardison، ہارورڈ یونیورسٹی] [یہ CS50 ہے.] [CS50.TV] تو خوش آمدید، لڑکوں. دفعہ 5 میں آپ کا استقبال ہے. اس وقت 0 کوئز مکمل اور دیکھا ہے کہ کس طرح تم نے کیا ہے، امید ہے کہ آپ واقعی اچھا لگ رہا ہے کیونکہ میں اس سیکشن میں سکور کی طرف سے بہت متاثر ہوئے ہیں. ہمارے آن لائن کے ناظرین کے لئے، ہم سوالات کے ایک جوڑے کی ہے مسئلہ سیٹ پر آخری دو مسائل کے بارے میں - یا کوئج، بلکہ. تو ہم ان سے زیادہ واقعی جلدی جانا جا رہے ہیں تا کہ ہر کوئی دیکھتا ہے کیا ہوا اور کس طرح بلکہ صرف حل خود دیکھنے سے اصل حل کے ذریعے جانے کے لئے. ہم واقعی مسائل کے آخری دو سے زیادہ تیزی سے جا رہے ہو، 32 اور 33. بس پھر، تو ہے کہ آن لائن ناظرین یہ دیکھ سکتے ہیں. اگر آپ کے میں اپنے 32 مسئلہ، جو 13 صفحے پر ہے کی طرف رجوع اورقرب اختیار، 16 سے باہر 13، 32 مسئلہ تمام سویپ کے بارے میں ہے. یہ دو integers گماگمن کے بارے میں تھا. یہ مسئلہ یہ ہے کہ ہم درس میں وقت کے ایک جوڑے میں گیا تھا ہے. اور یہاں میں جو ہم نے تم سے کرنے کو کہہ رہے تھے ایک فوری میموری ٹریس ہے. متغیر کی اقدار میں بھر کے طور پر انہوں نے اسٹیک پر ہیں کوڈ اس سویپ تقریب کے ذریعے جاتا ہے. خاص طور پر، جو ہم دیکھ رہے ہیں - ہوں اس رکن نیچے ڈال جا - خاص طور پر، جو ہم دیکھ رہے ہیں وہ ہے اس لائن 6 حق یہاں کی تعداد ہے. اور یہ صرف پچھلے مسئلے سے contiguity کے لئے 6 گنا ہے. ہمیں کیا کرنا چاہتے ہیں یا لیبل میموری کی حالت کو ظاہر کے طور پر اس وقت ہے جب ہم نے یہ لائن نمبر 6 پھانسی، جو مؤثر طریقے سے ہمارے سویپ تقریب سے واپسی یہیں ہے. اگر ہم یہاں نیچے سکرال، ہم نے دیکھا کہ یاد میں سب کچھ کے پتے ہمارے لئے فراہم کی گئی تھی. یہ بہت اہم ہے، ہم صرف ایک لمحے میں اس پر واپس آ جائیں گے. اور پھر یہاں نیچے کے نیچے دیے گئے، ہم ایک چھوٹی سی میموری خاکہ تھا کہ ہم سے رجوع کرنے جا رہے ہیں. دراصل میں نے یہ کیا ہے میرے iPad پر باہر. تو میں صرف ریفرنس کے لئے رکن اور اس کوڈ کے درمیان آگے پیچھے متبادل جا رہا ہوں. چلو شروع کرتے ہیں. پہلے، اہم لائنز کی پہلی دو پر یہاں توجہ مرکوز ہے. شروع کرنے کے لئے، ہم نے 1 اور Y X 2 ابتدا جا رہے ہیں. تو ہم دو عددی متغیر ہے، وہ دونوں اسٹیک پر رکھ دیا گیا جا رہے ہیں. ہم ان میں 1 اور 2 رکھنے جا رہے ہیں. اگر ایسا ہے تو میں نے اپنے رکن پلٹائیں، امید ہے، دیکھتے ہیں - ایپل ٹی وی mirroring، اور ہم وہاں جا رہے ہیں. ٹھیک ہے. تو اگر میں اپنے رکن پلٹائیں، میں 1 اور Y X 2 ابتدا کرنا چاہتے ہیں. ہم اس X نشان لگا دیا گیا ہے کے خانے میں 1 لکھ کر بہت آسانی سے اور ایک باکس میں 2 Y نشان لگا دیا گیا ہے. کافی آسان ہے. تو اب لیپ ٹاپ پر واپس جانے کے لئے، ملاحظہ کریں اس کے بعد کیا ہوتا ہے. تو یہ اگلی لائن ہے جہاں کچھ مشکل حاصل ہے. ہم پیرامیٹرز کے طور پر X اور Y کے ایڈریس کا پتہ پاس اور سویپ تقریب B. X اور Y کے ایڈریس کا پتہ وہ چیزیں ہیں جو ہم نہیں حساب کر سکتے ہیں ہیں یہ گولی کا حوالہ دیتے بغیر یہاں ذیل دکھاتا ہے. اور خوش قسمتی سے، پہلے دو گولی پوائنٹس ہمیں بتائیں کہ بالکل کیا جوابات ہیں. یاد میں X کا پتہ 10 ہے، اور Y کی یاد میں پتہ 14 ہے. لہذا ان اقدار ہیں کہ میں منظور ہو جاتے ہیں اور ہمارے سویپ تقریب میں اوپر ب. تو پھر ہمارے آریھ واپس سوئچنگ، میں ایک میں 10 لکھ سکتے ہیں اور بی میں 14. اب، اس نقطہ ہے جہاں ہم سویپ کے ساتھ آگے بڑھنے. تو لیپ ٹاپ دوبارہ flipping ہم دیکھتے ہیں کہ سویپ کام میں پہلے dereference ایک اور دکان tmp نتیجہ ہے. تو dereference آپریٹر کا کہنا ہے کہ، "ارے ایک پتے کے طور پر ایک متغیر کی کے علاج کے. جو کچھ بھی اس پتے پر محفوظ کیا جاتا ہے دیکھیں، اور لوڈ. " کیا تمہیں متغیر کی لوڈ، ہماری tmp متغیر میں محفوظ کیا جا رہا ہے. رکن واپس Flipping. اگر ہم 10 کو حل کرنے جاتے ہیں، ہم جانتے ہیں کہ 10 varible X پتہ ہے کیونکہ ہم ہمارے گولی نقطہ ہے کہ یاد میں X کا پتہ 10 کی طرف سے کہا گیا تھا. تو ہم وہاں جاتے ہیں، اس کی قدر، جو 1 ہے حاصل، کے طور پر ہم اپنے رکن پر دیکھ سکتے ہیں، اور یہ کہ tmp میں لوڈ. ایک بار پھر، یہ آخری مواد نہیں ہے. ہم اس کے ذریعے چلنے کے لئے جا رہے ہیں اور ہم آخر میں ہمارے پروگرام کے فائنل میں ریاست میں لے کر آتی ہوں. لیکن اب، ہم نے 1 قدر tmp میں محفوظ ہے. اور یہاں پر ایک فوری سوال ہے. [الیگزینڈر] dereference آپریٹر ہے - جو متغیر کے سامنے میں ستارہ ٹھیک ہے؟ >> جی ہاں. dereference آپریٹر تو، جیسا کہ ہم اپنے لیپ ٹاپ واپس ایک بار پھر پلٹائیں سامنے حق یہ ستارہ ہے. اس لحاظ سے، یہ ہے - آپ اسے ضرب آپریٹر کے ساتھ اس کے برعکس جس میں دو چیزوں کی ضرورت ہوتی ہے، dereference آپریٹر یک رکنی آپریٹر ہے. بس ایک قیمت کا اطلاق کے طور پر ایک بائنری آپریٹر کی مخالفت، آپ دو مختلف اقدار جہاں لاگو ہوتے ہیں. جس سے کہ اس لائن میں کیا ہوتا ہے. ہم 1 قدر بھاری اور ہماری عارضی عددی متغیر میں محفوظ ہے. اگلی لائن، ہم میں ب کے مندرجات ذخیرہ - یا، بلکہ، ہم مواد ہے کہ ب وہ جگہ ہے جہاں ایک اشارہ کر رہا ہے میں اشارہ کر رہا ہے سٹور. اگر ہم نے دائیں سے بائیں سے اس کا تجزیہ، ہم dereference بی جا رہے ہیں، ہم 14 کو حل کرنے جا رہے ہیں، ہم عددی ہے جو وہاں ہے پر قبضہ کرنے جا رہے ہیں، اور پھر ہم 10 ایڈریس پر جانے کے لئے جا رہے ہیں، اور ہم اس خلا میں ب ہمارے dereference کے نتیجہ پر پھینک جا رہے ہیں. ، ہمارے رکن، جہاں ہم یہ تھوڑا زیادہ ٹھوس کر سکتے ہیں کرنے کے لئے واپس Flipping یہ اگر میں پتوں کی سب پر نمبر یہاں لکھ دیں میں مدد کر سکتے ہیں. X تو ہم جانتے ہیں کہ Y، ہم 14 ایڈریس پر ہیں، 10 ایڈریس پر ہے. جب ہم ب سے شروع، ہم dereference ب، ہم 2 قیمت پر قبضہ کرنے جا رہے ہیں. ہم اس کی قیمت کی وجہ سے اس قدر ہے کہ 14 ایڈریس پر رہتا ہے پر قبضہ کرنے کے لئے جا رہے ہیں. اور ہم متغیر ہے کہ 10 ایڈریس پر رہتے ہیں میں ڈالنے جا رہے ہیں، جو وہاں ہے ہمارے متغیر x کے مطابق ہے. تو ہم یہاں overwriting تھوڑا سا کر سکتے ہیں ہم ہمارے 1 نجات کہاں ملتا ہے اور اس کے بجائے ہم 2 لکھ. تو سب کچھ ٹھیک ہے اور دنیا میں اچھا ہے، اگرچہ اب ہم ادلیکھت ایکس ہے. ہم X ہمارے tmp متغیر میں پرانے قیمت ذخیرہ ہے. تو ہم اگلی لائن کے ساتھ سویپ مکمل کر سکتے ہیں. ہمارے لیپ ٹاپ واپس Flipping. اب وہ سب باقیات مواد ہماری عارضی عددی متغیر سے باہر لے جانا ہے اور ان متغیر جو پتہ ہے کہ ب کر رہا ہے میں رہتا ہے میں سٹور. تو ہم نے مؤثر طریقے سے dereference ب متغیر تک رسائی حاصل کرنے کے لئے جا رہے ہیں جو پتہ ہے کہ ب اس میں ڈگری حاصل کی ہے، اور ہم قدر ہے کہ tmp اس میں روک رہی ہے سامان کے لئے جا رہے ہیں. رکن واپس ایک بار Flipping ہے. میں نے اس قیمت کو یہاں مٹانے، 2 کر سکتے ہیں، اور اس کے بجائے ہم اس میں 1 حق کاپی کریں گے. اس کے بعد کورس کے اگلی لائن ہے جو executes - اگر ہم لیپ ٹاپ واپس پلٹائیں - اس نقطہ 6 ہے، جو نقطہ ہے جس میں ہم ہمارے آریھ مکمل طور پر بھرے چاہتا تھا. تو رکن واپس flipping ایک بار، صرف اس لئے آپ کو مکمل خاکہ دیکھ سکتے ہیں، آپ دیکھیں گے کہ ہم میں 10، ب میں 14، ایک tmp میں 1، 2 X میں، اور ایک Y 1 کر سکتے ہیں. ہیں اس کے بارے میں کوئی سوال ہے؟ کیا اس کا کوئی مطلب، اس کے ذریعے چلا گیا ہے؟ کم سمجھ ہے؟ امید نہیں ہے. ٹھیک ہے. نوٹیفائر بہت مشکل موضوع ہے. لوگ ہم ساتھ مل کر کام ایک بہت عام کہاوت ہے: "اشارہ سمجھنے کے لئے، آپ کو اشارہ سب سے پہلے سمجھنا چاہیے." جو مجھے لگتا ہے کہ بہت سچ ہے. یہ ایک اس کی عادت کے لئے کچھ وقت لگ کرتا ہے. تصویریں قرعہ اندازی، ایک اس طرح میموری diagrams کی قرعہ اندازی بہت مدد مل رہی ہے، اور اس کے بعد آپ کو مثال کے طور پر کے بعد مثال کے طور پر کے بعد مثال کے طور پر کے ذریعے چل، یہ تھوڑا زیادہ جذبات اور تھوڑا اور احساس اور ایک چھوٹا سا احساس بنانے کے لئے شروع کر دیں گے. آخر میں، ایک دن آپ ہے، یہ سب پوری طرح سے مہارت حاصل کریں گے. سے کوئی بھی سوال پہلے ہم اگلے مسئلہ پر منتقل؟ ٹھیک ہے. تو لیپ ٹاپ واپس پلٹائیں. اگلی مسئلہ ہم نے مسئلہ 33 نمبر فائل پر ہے I / O. یہ ایک تھوڑا سا میں زوم. 33 مسئلہ - جی ہاں؟ [ڈینیل] میں صرف ایک فوری سوال تھا. یہ ستارہ یا ستارے، جب آپ کو ایک ستارے پہلے استعمال کرتے ہیں محولہ لقب ضبطی کہا جاتا ہے. یہ کیا ہے جب تم سے پہلے ایمپرسینڈ استعمال کرتے بلایا تھا؟ >> ایمپرسینڈ پہلے آپریٹر کا پتہ ہے. تو بیک اپ سکرال. افوہ. میں تو میں نے سچ میں کتاب نہیں کر سکتا زوم موڈ میں ہوں. اگر ہم واقعی اس کوڈ میں فوری طور پر نظر آتے ہیں یہاں، پھر ایک ہی بات پر ہو رہا ہے. اگر ہم اس کوڈ میں دیکھتے ہیں یہاں، اس لائن پر جہاں ہم کال تبادلہ کرتے ہیں تو، ایمپرسینڈ صرف کہہ رہا ہے "پتہ جس میں متغیر x زندگی حاصل ہے." جب آپ سنکلک اپنے کوڈ کو آگاہ کریں، یہ اصل میں جسمانی طور پر رہنے کے متغیرات میں سے سب کے لئے یاد میں ایک جگہ کو نشان زد کر ہے. اور تو کیا سنکلک میں ایک بار یہ سب کچھ مرتب کیا ہے، تو کر سکتے ہیں، اسے جانتا ہے، "اوہ، میں 10 ایڈریس پر ایکس ڈال میں 14 ایڈریس پر Y ڈال." تو یہ آپ کے لئے ان اقدار میں بھر سکتا ہے. تو پھر تم کر سکتے ہیں - اس کے ساتھ ساتھ پاس اور Y سکتا ہے تو اس کے پاس ہے. یہ لوگ کو پتہ مل، لیکن وہ بھی، جب آپ انہیں سویپ تقریب میں گزر، اس قسم کی معلومات، اس int یہیں * سنکلک بتاتی ہے، "ٹھیک ہے، ہم ایک عددی متغیر کی ایک پتے کے طور پر اس ایڈریس پر ترجمانی جا رہے ہیں." ایک int کے پتے کے طور پر، جس میں ایک کردار متغیر کے ایڈریس سے مختلف ہے کیونکہ ایک int 32 بٹ ایک مشین پر لیتا ہے، جگہ کی 4 بائٹس لیتا ہے، جبکہ ایک کردار صرف جگہ کی 1 بائٹ لیتا ہے. تو یہ بھی پتہ ہے کیا ہے اہم ہے - کیا رہتا ہے، کس قسم کی قیمت کے پتہ ہے جو اندر منظور گیا میں رہنے یا ایڈریس ہے کہ آپ کے ساتھ کام کر رہے ہیں. اس طرح، آپ کو کتنی معلومات کی شراکت دراصل آپ کے RAM کے باہر لوڈ جانتے ہیں. اور پھر، جی ہاں، آپ کی طرح اس dereference آپریٹر، پوچھ رہے تھے، جاتا ہے اور ایک مخصوص ایڈریس پر معلومات تک رسائی حاصل ہے. ، تو یہ ایک متغیر کے ساتھ کہتے ہیں کہ، یہاں، پتہ کے طور پر ایک کے مندرجات کے علاج کے اس ایڈریس پر جانے اور باہر ھیںچو، ایک رجسٹر میں پروسیسر، لوڈ میں لوڈ اصل اقدار یا مواد جو اس ایڈریس پر رہتے ہیں. مزید کوئی سوال؟ یہ اچھے سوالات ہیں. یہ نئی اصطلاحات کا ایک بھی بہت ہے. یہ بھی funky کی طرح ہے، مختلف مقامات پر دیکھ اور *. ٹھیک ہے. تو واپس 33 مسئلہ فائل، I / O. یہ ان مسائل کہ مجھے لگتا ہے کے ایک جوڑے کی چیزیں ہوا میں سے ایک تھا. ایک، یہ ایک کافی نیا موضوع ہے. یہ کوئز سے پہلے بہت جلد پیش کیا گیا ہے، اور اس کے بعد مجھے لگتا ہے کہ یہ ریاضی میں لفظ کے ان مسائل میں سے ایک کی طرح قسم کی تھی جہاں وہ آپ کی معلومات کی ایک بہت کچھ دے، لیکن آپ نے واقعی ختم نہیں کرتے اس کے ایک ٹن کو استعمال کرنے کے لئے. اس مسئلے کے پہلے حصہ کا ذکر ہے جو ایک CSV فائل ہے. اب، ایک CSV فائل، تفصیل کے مطابق، ایک کوما سے الگ کردہ اقدار فائل ہے. وجہ یہ تمام دلچسپ ہے، اور اس کی وجہ سے تم نے کبھی ان کا استعمال، ہے، کیونکہ تم میں سے کتنے بھی ایکسل جیسی چیزیں استعمال کیا ہے؟ تم میں سے زیادہ تر کے اعداد و شمار ہے، شاید آپ کی زندگی میں کسی نہ کسی موڑ پر استعمال کرتے ہیں، یا گا. آپ ایکسل کی طرح کے کچھ کا استعمال کریں گے. ، کے لئے ایک ایکسل سپریڈ شیٹ کی ڈیٹا باہر نکل یا اس کے ساتھ کسی بھی قسم کی پروسیسنگ کے کرنا اگر آپ C پروگرام یا ازگر پروگرام جاوا پروگرام لکھنا چاہتے تھے، ڈیٹا تمہیں وہاں میں جمع کیا ہے کے ساتھ نمٹنے کے، اسے باہر حاصل کرنے کے لئے سب سے زیادہ عام طریقوں میں سے ایک ایک CSV فائل میں ہے. اور تم ایکسل کھولنے اور جب آپ کو بات چیت 'کے طور پر محفوظ کریں' کر سکتے ہیں، آپ کو ایک حقیقی CSV فائل حاصل کر سکتے ہیں. معلوم ہے کہ کس طرح ان چیزوں کے ساتھ نمٹنے کے لئے آسان ہے. جس طرح یہ کام کرتا ہے یہ ہے کہ یہ اسی طرح کی ہے - میرا مطلب ہے، یہ بنیادی طور پر ایک سپریڈ شیٹ mimicking ہے، جہاں، جیسا کہ ہم یہاں دیکھتے ہیں بہت چھوڑ سب سے زیادہ ٹکڑا میں، ہم سب کو آخری نام ہے. تو ہم Malan، تو Hardison، اور پھر Bowden، MacWilliam، اور پھر چان ہے. تمام آخری نام. اور پھر پہلے ناموں سے کوما آخری نام الگ کرتی ہے. ڈیوڈ، نیٹ، روب، ٹامی، اور Zamyla. میں ہمیشہ رابی اور ٹام ملا. اور پھر آخر میں، تیسرے کالم میں ای میل ایڈریس ہے. ایک بار جب آپ یہ سمجھ رہے ہیں، باقی پروگرام کا عدل کو نافذ کرنے کا براہ راست ہے. کیا ہم تاکہ ہماری C پروگرام میں اس ایک ہی ساخت پر نقل کیا ہے ہے ہم نے ایک ڈھانچہ استعمال کیا جاتا ہے. ہم ان تھوڑا ساتھ ساتھ کے ساتھ کھیلنے کا آغاز کریں گے. ہم نے انہیں مسئلہ 3 سیٹ، جب ہم لغات سے نمٹنے کر رہے تھے میں پہلے تھوڑا سا دیکھا. لیکن اس کے عملے struct آخری نام، پہلا نام، اور ایک ای میل کے ذخیرہ. ہمارے CSV فائل کی طرح صرف ذخیرہ کیے ہوئے ہے. تو یہ صرف ایک شکل سے دوسرے میں تبدیل ہے. ہم اس معاملے میں، ایک سطر میں عملے کے struct تبدیل ہے، ایسے ہی ایک کوما سے الگ لائن،. کیا اس کا کوئی مطلب ہے؟ تم لوگوں نے سب کو گئے تمام سوالات کے لے لیا ہے، تو میں سوچ آپ کو کم از کم کچھ اس کے بارے میں سوچنے کا وقت تھا. باڑے کی تقریب میں، مسئلہ ہم میں لینے کے لئے پوچھتا ہے - یہ ایک تھوڑا سا میں we'll زوم - عملے کی ساخت، عملے struct کے نام کے ساتھ لے، اور ہمارے staff.csv فائل کے مواد کو شامل ہے. یہ پتہ چلا ہے کہ یہ منصفانہ استعمال کرنے کے لئے براہ راست ہے. ہم یہ تھوڑا سا کام کرتا ہے آج کے ارد گرد کی قسم ادا کریں گے. لیکن اس معاملے میں، fprintf تقریب واقعی اہم ہے. تو، ہم fprintf کے ساتھ پرنٹ، جیسا کہ لوگ آپ کو اس پوری مدت printf کا استعمال کرتے ہوئے کر سکتے ہیں. آپ printf ایک فائل میں لائن کر سکتے ہیں. تو کیا تم صرف معمول printf کال کرنے کے بجائے جہاں اس کی شکل سٹرنگ دے اور اس کے بعد آپ مندرجہ ذیل دلائل کے ساتھ تمام متغیر کی جگہ لے لیں، fprintf کے ساتھ، آپ کا بہت پہلے دلیل کی بجائے فائل سے آپ کو لکھنے کے لئے کرنا چاہتے ہیں ہے. اگر ہم مثال کے طور پر آلات میں اس کو دیکھو، fprintf آدمی تھے، ہم printf اور fprintf کے درمیان فرق دیکھ سکتے ہیں. میں یہاں میں تھوڑا سا زوم کریں گے. تو، ہم printf کے ساتھ یہ ایک فارمیٹ سٹرنگ دے، اور پھر بعد میں دلائل ہماری شکل سٹرنگ میں تبدیلی یا متبادل کے لئے تمام متغیر ہیں. fprintf کے ساتھ جبکہ سب سے پہلے دلیل واقعی اس فائل کہا جاتا ندی * ہے. یہاں ہمارے کرایہ پر واپس منتقل ہم نے پہلے سے ہی نے ہماری فائل * ندی ہمارے لئے کھول دیا ہے. یہ ہے کہ اس کی پہلی سطر ہے، یہ staff.csv فائل کو کھولتا ہے، یہ شامل موڈ میں کھلتا ہے، اور ہے کہ ہمارے لئے کیا بچا ہے ہے عملے فائل کی ساخت لکھیں. اور، دیکھتے، میں آئی پیڈ کو استعمال کرنے کے لئے چاہتے ہیں؟ میں آئی پیڈ کو استعمال کریں گے. ہم باطل ہے - میز پر یہ تو میں تھوڑا بہتر لکھ سکتے ہیں ڈال دو - کرایہ پر باطل ہے اور یہ ایک بحث میں لیتا ہے، عملے سے ملاقات کی کی ساخت ہے. ہماری منحنی خطوط وحدانی ہے، ہم اپنی فائل کہا جاتا فائل * ہے، ہم اپنے fopen ہمیں دی گئی لائن ہے اور میں یہ نقطہ کے طور پر صرف لکھنے کے بعد یہ pedia میں پہلے سے ہی کریں گے. اور پھر ہماری اگلی لائن پر ہم fprintf کو ایک فون کرنا جا رہے ہیں اور ہم فائل میں منتقل کرنے کی جا رہی ہے کہ ہم کو پرنٹ کرنے کے لئے چاہتے ہیں کر رہے ہیں، اور پھر ہماری شکل سٹرنگ، جس میں - میں تم لوگ مجھے بتاو کہ یہ کیا طرح لگتا ہے گے. آپ کے بارے میں، کیسے سٹیلا؟ کیا آپ کو معلوم ہے کہ کیا شکل سٹرنگ کے پہلے حصہ کی طرح لگتا ہے؟ [سٹیلا] مجھے یقین نہیں ہے. >> جمی پوچھنا بلا جھجھک. کیا آپ جمی کو جانتے ہو؟ [جمی] صرف یہ آخری ہوگا؟ مجھے پتہ نہیں ہے. میں مکمل طور پر اس بات کا یقین نہیں ہوں. ٹھیک ہے. >> کے بارے میں کیسے، کوئی امتحان کیا یہ صحیح ملا؟ نہیں ٹھیک ہے. یہ پتہ چلا ہے کہ یہاں ہمیں کیا کرنا ہے ہے ہم نے ہمارے عملے کی ساخت میں سے ہر ایک حصہ کی ضرورت ہے ہماری فائل میں ایک تار کے طور پر باہر طباعت کی جائے. ہم صرف سٹرنگ متبادل کردار تین مختلف اوقات کا استعمال کریں کیونکہ ہم ایک آخری نام ہے کوما کے بعد، تو پہلا نام کوما کے بعد، اور پھر آخر میں ای میل ایڈریس جس کے بعد ہے - جو نہیں ہے اپنی سکرین پر فٹنگ کا - لیکن یہ ایک newline کردار کے بعد ہے. لہذا میں نے یہ صرف وہاں لکھنے جا رہا ہوں. اور پھر ہماری شکل سٹرنگ کے بعد، ہم صرف substitutions ہے، جو ہم ڈاٹ سنکیتن کا استعمال کرتے ہوئے تک رسائی ہے کہ ہم نے مسئلہ 3 سیٹ میں دیکھا ہے. ہم s.last، s.first، اور s.email کا استعمال کر سکتے ہیں ہماری شکل سٹرنگ میں ان تین اقدار میں متبادل. تو وہ کیسے؟ احساس ہے؟ جی ہاں؟ نہیں؟ شاید؟ ٹھیک ہے. آخری بات یہ ہے کہ ہم یہ کرتے ہیں کے بعد ہم طباعت اور اس کے بعد ہم نے ہماری فائل کو کھول دیا ہے: جب بھی ہم نے ایک فائل کھولی ہے، ہم ہمیشہ اسے بند یاد ہے. کیونکہ دوسری صورت میں ہم ختم میموری لیک کر رہا ہوں، فائل descriptors کا استعمال کرتے ہوئے. تو اس کو بند کرنے کے لئے ہم جو فنکشن استعمال کرتے ہیں؟ ڈینیل؟ [ڈینیل] fclose؟ >> fclose، بالکل. تو اس مسئلہ کے آخری حصہ مناسب طریقے سے فائل قریب تھا، fclose فنکشن کا استعمال کرتے ہوئے، جس میں صرف اس طرح لگ رہا ہے. بھی پاگل نہیں. ڈاؤن لوڈ، اتارنا. تو یہ گئے تمام سوالات پر 33 مسئلہ ہے. ہم یقینی طور پر زیادہ فائل I / O آ پڑے گا. آج ہم درس میں تھوڑا سا زیادہ حصے میں کریں گے، یا آج اس لیے کہ وہ کیا اس آئندہ pset کا بڑا حصہ بنانے جا رہا ہے. چلو اس وقت کوئز سے منتقل. جی ہاں؟ [شارلٹ]] fclose کی بجائے کیوں fclose (فائل) (staff.csv) ہیں؟ >> آہ. کیونکہ یہ پتہ چلتا ہے کہ - تو سوال، جو ایک عظیم ہے، کیوں ہے، جب ہم fclose لکھنے، ہم fclose (فائل) ستارہ متغیر لکھ رہے ہیں فائل کا نام، staff.csv کے خلاف ہے؟ کیا یہ صحیح ہے؟ جی ہاں. تو چلو ایک نظر ڈالیں. اگر میں نے اپنے لیپ ٹاپ میں واپس سوئچ، اور fclose فنکشن کو دیکھو. تو fclose تقریب ندی بند کر دیتا ہے اور پوائنٹر میں ندی کہ ہم بند کرنا چاہتے ہیں پر لے جاتا ہے ہے، کے طور پر اصل فائل کے نام کہ ہم کو بند کرنا چاہتے ہیں کے خلاف ہے. اور یہ کیونکہ پردے کے پیچھے، جب آپ fopen کے ایک فون کر جب آپ کو ایک فائل کو کھولنے کے، آپ اصل میں میموری آونٹن کر رہے ہیں فائل کے بارے میں معلومات جمع کرنے. تو آپ کو فائل پوائنٹر ہے کہ فائل کے بارے میں معلومات ہے، ، جیسا کہ یہ کھلا ہے، اس کے سائز، جہاں آپ کو فائل میں ہیں تم ایسا کر سکتے ہیں فائل کے اندر اندر اس مخصوص جگہ پر کالیں لکھنے پڑھنے اور. آپ کو ختم فائل کا نام بند کرنے کے بجائے پوائنٹر بند ہے. جی ہاں؟ [ڈینیل] کے لئے کرایہ پر استعمال کرنے کے لئے، آپ کہیں گے - یہ کس طرح صارف کی ان پٹ حاصل ہے؟ کیا GetString طرح fprintf احساس میں کام ہے کہ وہ صارف کی ان پٹ کے لئے انتظار کریں گے اور تم اس قسم کا مطالبہ - یا آپ کے لئے میں ان تین چیزوں ٹائپ کرنے کا انتظار ہے؟ یا تم سے کچھ کرایہ پر لاگو کرنے کے لئے استعمال کرنے کی ضرورت ہے؟ >> جی ہاں. تو ہم نہیں ہیں - سوال ہے، کس طرح تھا کہ ہم صارف کی ان پٹ کے لئے کرایہ پر لاگو کرنے کے لئے ہے؟ اور کیا ہم یہاں باڑے کے فون کرنے والے ہے، پہلے ہی پر struct میں ذخیرہ کردہ ڈیٹا میں سے سب کے ساتھ اس کے عملے struct میں منظور. تو fprintf کہ ڈیٹا فائل سے براہ راست لکھنے کے قابل ہے. کوئی صارف کی ان پٹ کے لئے انتظار کر رہا ہے. صارف پہلے ہی مناسب طریقے سے یہ اس عملے struct میں ڈال کر ان پٹ دی گئی ہے. کورس کی چیزیں، توڑ اگر ان اشارہ میں سے کسی اتارنا null تھے، تو ہم یہاں واپس سکرال کریں اور ہم اپنے struct میں نظر آتے ہیں. ہم سٹرنگ آخری سٹرنگ، پہلے، سٹرنگ کا ای میل ہے. اب ہم جانتے ہیں کہ واقعی ان میں سے سب، ڈاکو کے تحت، چار * متغیر ہیں. جو اتارنا null سکتے ہیں یا نہیں کر سکتے ہیں کی طرف اشارہ کرتے ہوئے. وہ ڈھیر پر یاد کی طرف اشارہ کرتے ہوئے کر سکتے ہیں، اسٹیک پر شاید میموری. ہم واقعی نہیں جانتے ہو لیکن اگر یہ اشارہ میں سے کسی ایک، شہوت انگیز null یا غلط ہیں، کہ ہمارے باڑے تقریب ضرور کریش گے. یہ کچھ ہے کہ امتحان کے دائرہ کار سے باہر کی قسم تھی. ہم اس کے بارے میں فکر نہیں کر رہے ہیں. بہت اچھا ہے. ٹھیک ہے. تو کوئز سے بڑھ رہا ہے. چلو، اس لڑکے کو بند، اور ہم 4 pset کو دیکھنے کے لئے جا رہے ہیں. تو اگر آپ لوگ pset رپورٹ پر نظر، ایک بار آپ کو اس تک رسائی حاصل کر سکتے ہیں، cs50.net/quizzes ہم سیکشن کے مسائل آج کے کچھ کے ذریعے جانے کے لئے جا رہے ہیں. میں نیچے سکرول رہا ہوں. - سوالات کے سیکشن pset رپورٹ کے تیسرے صفحے پر شروع ہوتی ہے. اور پہلا حصہ آپ سے کہتا ہے اور منتقل کیا جا رہا ہے اور پائپ پر مختصر دیکھنے. Cool مختصر طرح تھا، آپ کو کچھ نئے، ڈاؤن لوڈ، اتارنا کمانڈ لائن ترکیبیں ہے کہ آپ استعمال کر سکتے ہیں دکھاتا ہے. اور پھر ہم نے آپ کے لئے ایک چند سوالوں کے ساتھ مل گیا ہے. اسٹریمز کے بارے میں یہ پہلا سوال ہے، جس printf ڈیفالٹ کی طرف سے لکھا ہے، ہم اس قسم کی صرف تھوڑا سا ایک لمحے پہلے چھوا. یہ fprintf ہے کہ ہم صرف بات کر رہے تھے، اس کی دلیل کے طور پر ایک فائل * کے سلسلے میں لیتا ہے. fclose ایک فائل * کے سلسلے میں لیتا ہے، اور fopen کی واپسی کی قیمت آپ کو ایک فائل * ندی کے ساتھ ساتھ دیتا ہے. وجہ سے ہم سے پہلے لوگوں پر نہیں دیکھا ہے جب ہم printf کے ساتھ نمٹا ہے کیونکہ printf ڈیفالٹ ندی ہے. اور ڈیفالٹ ندی ہے جس سے یہ لکھتے ہیں آپ کے بارے میں مختصر میں باہر تلاش کر لیں گے. تو یقینی طور پر اس پر ایک نظر لے لو. آج کے حصے میں، ہم GDB کے بارے میں تھوڑا بہت بات کرنے جا رہے ہیں، سے زیادہ واقف تم اس کے ساتھ ہیں، تو آپ کو اس سے زیادہ سے زیادہ پریکٹس، بہتر کر سکیں آپ اصل میں نیچے اپنے اپنے کوڈ میں کیڑے کا شکار ہو جائے گا. یہ بہت ٹھیک کرنے کے عمل کی رفتار. تو printf کا استعمال کرتے ہوئے کی طرف سے، ہر بار تم نے کیا ہے کہ آپ اپنے کوڈ کو recompile ہے، آپ اسے دوبارہ چلانے ہے، کبھی کبھی آپ printf کال کے ارد گرد منتقل ہے، اسے باہر کوڈ تبصرہ، صرف ایک وقت لیتا ہے. ہمارا مقصد ہے اور آپ کو قائل ہے کہ GDB کے ساتھ، آپ بنیادی طور پر کر سکتے ہیں کرنے کی کوشش کرنا ہے آپ کے کوڈ میں کسی بھی موڑ پر printf کچھ اور آپ کو اسے recompile کبھی نہیں. تم نے اور printf اگلے جہاں اندازہ رکھنے شروع کرنے کے لئے کبھی نہیں. اس لائن کی کاپی کرنے کے لئے سب سے پہلے کام اور حصے کوڈ ویب سے دور ہو. میں کوڈ کی اس لائن ہے جو یہ کہتا ہے کہ، "wget ​​http://cdn.cs50.net" کاپی کر رہا ہوں. میں اس کو کاپی کرنے کے لئے جا رہا ہوں. میں اپنے آلات کو جا رہا ہوں، تم اتنا دیکھنا ہے کہ میں کیا کر رہا ہوں کر سکتے ہیں، زوم وہاں میں پیسٹ، اور جب میں درج کریں مارا، اس wget کمانڈ لفظی ہے ایک ویب حاصل ہے. یہ اس فائل انٹرنیٹ کی ھیںچو جا رہا ہے، اور اسے موجودہ ڈائریکٹری کو بچانے کے لئے جا رہا ہے. اب تم دیکھو اگر میں اپنے موجودہ فہرست ڈائریکٹری کہ میں ابھی وہاں میں اس section5.zip فائل ہے کر سکتے ہیں. اس آدمی کے ساتھ نمٹنے کا طریقہ اسے ان زپ کرنے کے لئے ہے، جو آپ کو صرف اس طرح کمانڈ لائن میں کیا کر سکتے ہیں. Section5.zip. وہ اسے ان زپ کریں گے، میرے لئے فولڈر تخلیق کرتے ہیں، مواد کی سب فلانا، انہیں وہاں میں ڈال دیا ہے. تو اب میں میرے حصے 5 CD کمانڈ کا استعمال کرتے ہوئے ڈائریکٹری میں جا سکتے ہیں. واضح کا استعمال کرتے ہوئے سکرین کو صاف کریں. تو سکرین صاف کریں. اب میں نے ایک اچھا صاف سے نمٹنے کے ٹرمینل ہے. اب اگر میں تمام فائلوں ہے کہ میں اس ڈائریکٹری میں نظر آنے والے کی فہرست، تم نے دیکھا ہے کہ میں چار فائلیں ہے: buggy1، buggy2، buggy3 اور buggy4. میں نے بھی ان کی اسی. سی فائلوں ہے. ہم اب کے لئے سی فائلوں. میں نظر نہیں آ رہے ہیں. اس کے بجائے، ہم ان سے جب ہم نے GDB کھولنے کے لئے استعمال کرنے کے لئے جا رہے ہیں. ہم نے ان کو رکھا ارد گرد ہے تاکہ ہم اصل منبع کوڈ کو رسائی حاصل ہے جب ہم GDB کو استعمال کر رہے ہیں، لیکن سیکشن کے اس حصے کا مقصد GDB کے ساتھ کے ارد گرد ٹنکر ہے اور دیکھ کہ ہم کس طرح اس کا استعمال جاننے میں ان چار چھوٹی گاڑی پروگراموں میں سے ہر ایک کے ساتھ کیا غلط ہو رہا ہے کر سکتے ہیں. تو ہم نے کمرے میں چاروں طرف صرف کر رہے ہیں واقعی بہت تیزی سے ہو رہا ہے، اور میں کسی چھوٹی گاڑی پروگراموں میں سے ایک کو چلانے کے لئے کہنے جا رہا ہوں، اور پھر ہم GDB کے ذریعے ایک گروپ کے طور پر جانا، اور ہم دیکھتے ہیں کہ ہم ان پروگراموں کو درست کر سکتا ہوں گے، یا کم از کم کی نشاندہی ہے کہ ان میں سے ہر ایک میں غلط ہو رہا ہے. ختم ڈینیل کے ساتھ شروع کریں. آپ buggy1 چلے گا؟ چلو دیکھتے ہیں کیا ہوتا ہے. [ڈینیل] یہ کہتے ہیں کہ ایک درخواست کی غلطی ہے. >> جی ہاں. بالکل. تو اگر میں buggy1 چلاتے ہیں، میں ایک seg غلطی ملتا ہے. اس وقت میں جا، اور buggy1.c کھول سکتے ہیں، اور اعداد و شمار کیا غلط ہو رہا ہے کرنے کی کوشش کریں، لیکن اس seg غلطی کی خرابی کے بارے میں سب سے زیادہ obnoxious چیزوں میں سے ایک یہ ہے کہ یہ پروگرام چیزوں کے مطابق اصل میں کیا غلط ہو گیا اور توڑ دیا آپ کو بتا نہیں ہے. آپ کی قسم کے کوڈ کو دیکھنے کے لئے کی ضرورت اور اندازہ کا استعمال کرتے ہوئے اندازہ لگا اور چیک کرنے کے لیے یا printf دیکھو کیا غلط ہو رہا ہے. GDB کے بارے میں بہترین چیزوں میں سے ایک یہ ہے کہ یہ بہت، بہت آسان ہے لائن جاننے کی، جس میں آپ کے پروگرام گر کر تباہ. یہ مکمل طور پر اسے استعمال کرنے کے لئے کے قابل ہے، یہاں تک کہ اگر صرف اس کے لئے ہے. تو GDB بوٹ، میں GDB ٹائپ کریں، اور پھر میں نے اسے ایکزیکیوٹیبل کہ میں چلانا چاہتے ہیں اس کے پاس راستے دے. یہاں میں ./buggy1 gdb ٹائپ کر رہا ہوں. درج کریں مارو. مجھے یہ سب کاپی رائٹ کی معلومات فراہم کرتا ہے، اور نیچے یہاں آپ کو یہ لائن نظر آئے گی جو یہ کہتا ہے کہ، "/ / گھر سے پڑھنا علامات jharvard/section5/buggy1. " اور اگر سب کچھ ٹھیک جاتا ہے تم نے دیکھا، یہ ایک پیغام ہے کہ اس طرح لگ رہا ہے کو پرنٹ کریں گے. یہ علامات پڑھ ہوں، اس کا کہنا ہے کہ، انہوں نے کہا کہ میں اپنے executable فائل سے علامات پڑھ رہا ہوں، "گے اور پھر یہ یہاں اس "کیا" پیغام ہو گا. اگر آپ کو اس میں سے کچھ دوسرے تغیرات دیکھنے میں مدد ملے گی، یا تم دیکھو، یہ علامات نہیں مل سکا یا ایسا کچھ کیا ہے اس کا مطلب ہے کہ آپ کے پاس صرف آپ کی کارکردگی مرتب نہیں کیا ہے مناسب طریقے سے. جب ہم GDB کے ساتھ استعمال کے لئے پروگرام مرتب، ہم کہ پرچم خصوصی G-استعمال کرنے کے لئے ہے، اور یہ کہ پہلے سے طے شدہ کی طرف سے کیا ہے کہ اگر آپ کو اپنے پروگراموں کو مرتب ٹائپ بنانے کی طرف سے یا چھوٹی گاڑی بنانے کی وصولی یا بنانا، ان میں سے کوئی بھی. لیکن اگر آپ بجنا کے ساتھ دستی طور پر مرتب کر رہے ہیں، تو آپ میں جانا ہے اور پرچم کہ G-شامل کرنا پڑے گا. اس وقت، اب کہ ہم اپنے GDB فوری ہے، پروگرام کو چلانے کے لئے یہ بہت آسان ہے. ہم رن یا تو، ٹائپ یا ہم R صرف ٹائپ کر سکتے ہیں کر سکتے ہیں. زیادہ تر GDB حکم مختصر ہو سکتا ہے. عام طور پر صرف ایک یا ایک جوڑے حروف، جو بہت اچھا ہے. تو سعد، اگر آپ نے ر ٹائپ اور مارا درج کریں، کیا ہوتا ہے؟ [سعد] میں SIGSEGV، انقطاع غلطی ہے، اور پھر یہ سب gobbledygook ہے. >> جی ہاں. ، جیسا کہ ہم ابھی سکرین پر دیکھ رہے ہیں، جیسا کہ اور خواجہ سعد نے کہا جب ہم رن یا ر ٹائپ اور درج کریں مارا، ہم اب بھی وہی seg غلطی ہو جاؤ. تو GDB کا استعمال کرتے ہوئے ہمارا مسئلہ حل نہیں ہوتا. لیکن یہ ہم میں سے کچھ gobbledygook دیتی ہے، اور یہ پتہ چلا ہے کہ اس gobbledygook اصل میں ہمیں بتاتا ہے جہاں یہ ہو رہا ہے. یہ ایک تھوڑا سا کا تجزیہ کرنے کے لئے، یہ پہلا سا تقریب ہے جس میں سب کچھ غلط ہو رہا ہے. اس strcmp_sse4_2 __ ہے، اور یہ ہمیں بتاتی ہے کہ اس فائل میں جو کچھ ہو رہا ہے کہا جاتا sysdeps/i386، یہ سب، پھر ایک گندگی کی طرح - لیکن 254 لائن. یہ کس قسم کی مشکل کا تجزیہ. عام طور پر جب آپ اس طرح کی چیزیں دیکھ، اس کا مطلب یہ ہے کہ یہ نظام لائبریریوں میں سے ایک میں faulting seg ہے. تو کچھ strcmp کے ساتھ کیا کرنا ہے. تم لوگ strcmp سے پہلے دیکھا ہے. بھی پاگل نہیں ہے لیکن اس کا مطلب ہوتا ہے کہ strcmp ٹوٹ یا یہ کہ وہاں strcmp کے ساتھ ایک مسئلہ ہے؟ آپ کیا الیگزینڈر سوچتے ہو؟ [الیگزینڈر] کیا ہے کہ - 254 لائن ہے؟ -، بائنری نہیں، لیکن یہ ان چھتوں نہیں ہے اور اس کے بعد ہر کام کے لئے کوئی دوسری زبان ہے. - ہے کہ اس تقریب میں 254، یا ہے؟ >> 254 لائن ہے. یہ اس فائل میں کی طرح لگتا ہے، یہ اسمبلی شاید کوڈ. لیکن، مجھے لگتا ہے کہ زیادہ اہم بات یہ ہے، کیونکہ ہم نے ایک seg غلطی ہو گیا ہے، اور ایسا لگتا ہے جیسے یہ strcmp تقریب سے آ رہا ہے. یہ کرتا ہے، مطلب تو، کہ strcmp ٹوٹ جاتا ہے؟ یہ امید نہیں کرنی چاہئے. تو صرف اس لئے کہ آپ کو ایک انقطاع غلطی ہے نظام کے افعال میں سے ایک میں، عام طور پر اس کا مطلب ہے کہ آپ صرف اس کا نام نہیں ہے درست طریقے سے. تیز ترین اعداد و شمار کیا اصل میں کیا چل رہا ہے کوئی بات ، جب آپ کچھ اس طرح پاگل، جب بھی آپ کو ایک seg غلطی نظر آئے خاص طور پر اگر آپ کو ایک پروگرام ہے کہ زیادہ سے زیادہ صرف مرکزی استعمال کر رہا ہے ہے، ایک backtrace استعمال کرنے کے لئے ہے. میں بیٹی لکھنے، کے طور پر مکمل backtrace لفظ کی مخالفت کی طرف سے backtrace abbreviate. لیکن شارلٹ، کیا ہوتا ہے جب آپ بیٹی ٹائپ کریں اور ہٹ درج کریں؟ [شارلٹ] یہ مجھے دو لائنز لائن 0 اور 1 لائن سے پتہ چلتا ہے. >> جی ہاں. تو لائن 0 اور اوپر 1. یہ اصل اسٹیک فریم ہے کہ کھیل میں اس وقت تھے جب آپ پروگرام گر کر تباہ ہو رہے ہیں. اولین فریم، 0 فریم سے شروع ہو رہا ہے، اور نیچے کے سب سے زیادہ، جس میں 1 فریم میں جانے کی ہے. ہمارا اولین فریم strcmp فریم ہے. آپ کو اس کے بارے میں سوچو جیسا کہ اس مسئلہ میں ہم صرف اشارہ کے ساتھ کوئز پر کیا کر رہے تھے اسی طرح کر سکتے ہیں، ہم اہم اسٹیک فریم کے سب سے اوپر پر جہاں اسٹیک فریم تبادلہ کیا تھا، اور ہم نے متغیر ہے کہ سویپ متغیر ہے کہ اہم استعمال کر رہے تھے کے سب سے اوپر پر استعمال کر رہا تھا تھا. یہ ہمارا حادثے ہماری strcmp تقریب، جو ہمارے بنیادی کام کی طرف سے کہا گیا تھا میں بھی ایسا ہی ہوا تھا، اور backtrace ہمیں دے جس میں نہ صرف کام کرتا ہے چیزوں میں ناکام رہے ہے، لیکن یہ بھی ہمیں بتا رہا ہے جہاں ہر چیز سے بلایا گیا تھا. اگر ایسا ہے تو میں تھوڑا اور پر حق سکرال، ہم دیکھتے ہیں کہ ہاں، ہم نے اس فائل strcmp sse4.s 254 لائن پر تھے سکتا ہے. لیکن کال buggy1.c، 6 لائن میں کیا گیا تھا. تو اس کا مطلب ہے کہ ہم کیا کر سکتے ہیں - یہ ہے کہ ہم صرف باہر کی جانچ پڑتال کریں اور دیکھو کہ کیا ہو رہا جا سکتا ہے buggy1.c، 6 لائن میں. ایک بار پھر، ایک جوڑے کو ایسا کرنے کے طریقے ہیں. ایک GDB سے باہر سے باہر نکلیں یا اپنے کوڈ کو کسی دوسرے ونڈو اور کراس حوالہ میں کھل. کہ میں بذات خود بہت آسان ہے کیونکہ اب اگر آپ کو دفتری اوقات میں ہیں اور آپ کو ایک seg غلطی ہے اور آپ کی TF سوچ جہاں سب کچھ توڑ کر رہے تھے، ، آپ صرف "اوہ، 6 لائن کا کہنا ہے کہ مجھے نہیں معلوم کہ کیا ہو رہا ہے کر سکتے ہیں. لیکن 6 لائن کے بارے میں کچھ اپنے پروگرام کو توڑنے کے لئے کی وجہ سے ہے. " دیگر ایسا کرنے کا ایک طریقہ ہے آپ اس GDB میں سے ملاقات کی فہرست کمانڈ کا استعمال کر سکتے ہیں. تم نے یہ L ساتھ بھی abbreviate کر سکتے ہیں. لہذا اگر ہم L مارا، کیا ہم یہاں کیا ملتا ہے؟ ہم نے عجیب چیزیں کی ایک پوری چڑھانے ملتا ہے. یہ اصل اسمبلی کوڈ آن ہے ہے جو strcmp_sse4_2 میں ہے. یہ funky کی طرح لگتا ہے، اور وجہ ہے ہم یہ ہو رہی ہے کی وجہ سے ابھی ہے، GDB 0 فریم میں ہے. تو ہم کسی بھی وقت نظر آتے ہیں متغیرات میں، کسی بھی وقت ہم ماخذ کوڈ پر نظر ہم ماخذ کوڈ میں تلاش کر کہ اسٹیک فریم سے متعلق ہم اس وقت اندر ہو رہے ہیں تو کے لئے بامعنی کچھ حاصل کرنے کے لئے، ہم ایک اسٹیک فریم ہے جو زیادہ سمجھ میں آتا ہے میں منتقل کریں. اس صورت میں، اہم اسٹیک فریم تھوڑا اور احساس کرے گا، کیونکہ وہ اصل میں کوڈ ہے کہ ہم نے لکھا تھا. strcmp کوڈ نہیں. طرح آپ کو اس کیس میں فریم کے درمیان منتقل، کیونکہ ہم دو کر سکتے ہیں، ہم 0 اور 1 کے ہے، آپ کے پاس ہے کہ اوپر سے نیچے تک حکم کے ساتھ کرتے ہیں. اگر میں نے ایک فریم میں منتقل، اب میں اہم اسٹیک فریم میں ہوں. میں نیچے میں کہاں تھا واپس جا سکتے ہیں، پھر جاؤ، نیچے پھر جانا، اور پھر جاؤ. اگر تم نے کبھی GDB میں آپ کے پروگرام کرتے ہیں، آپ کو ایک حادثے ملتی ہے، تو آپ کو backtrace ملے، اور آپ دیکھتے ہیں کہ یہ کچھ فائل تمہیں پتہ نہیں کیا ہو رہا ہے میں ہے. آپ کی فہرست کی کوشش کرتے ہیں، آپ نے جو کوڈ پر واقف نظر نہیں، آپ کے فریم پر ایک نظر لو اور باہر کہاں ہو تم اعداد و شمار. آپ کو شاید غلط اسٹیک فریم میں ہیں. یا کم سے کم آپ ایک اسٹیک فریم ہے کہ ایک ہے کہ آپ واقعی ڈیبگ کر سکتے ہیں نہیں ہے میں ہیں. اب کہ ہم مناسب اسٹیک فریم میں ہیں، ہم اہم ہیں، اب ہم فہرست کمانڈ کا استعمال کرتے ہوئے اعداد و شمار کیا لائن تھا کر سکتے ہیں. اور تم اسے دیکھ سکتے ہیں، اور یہ ہمارے لئے طباعت یہیں ہے. لیکن ہم سب ایک ہی فہرست مارا، اور ان کی فہرست ہمیں یہ اچھی پرنٹ آؤٹ دیتا ہے کر سکتے ہیں اصل منبع کوڈ ہے جو یہاں ہو رہا ہے. خاص طور پر، ہم نے 6 لائن دیکھ سکتے ہیں. ہم دیکھتے ہیں یہاں کیا چل رہا ہے کر سکتے ہیں. اور ایسا لگتا ہے جیسے ہم ایک تار کا موازنہ کر رہے ہیں سٹرنگ "CS50 پتھر" اور argv کے درمیان [1]. اس کے بارے میں کچھ اجلاس ہونے کے تناظر کیا گیا تھا. تو Missy، آپ کیا یہاں جا سکتا ہے کسی بھی خیالات ہے؟ [Missy] مجھے پتہ نہیں کیوں یہ اجلاس ہونے کے تناظر نہیں ہے. >> آپ کو پتہ نہیں کیوں یہ اجلاس ہونے کے تناظر ہے یا نہیں؟ جمی، کوئی خیالات؟ [جمی]، میں مکمل طور پر اس بات کا یقین نہیں ہوں، لیکن آخری بار ہم نے سٹرنگ کا استعمال کیا موازنہ یا strcmp، ہم نے اس کے تحت تین مختلف مقدمات کی طرح تھا. ہم == ایک نہیں تھا، میرے خیال میں، ٹھیک ہے کہ پہلی سطر میں نہیں ہے. اس کے بجائے اسے تین میں الگ کیا گیا تھا، اور ایک == 0 تھا، میں سے ایک تھا <0، مجھے لگتا ہے کہ، اور ایک> 0. تو اس طرح کچھ ہو سکتا ہے؟ >> جی ہاں. تو اس مسئلہ ہے ہم موازنہ کر رہے ہیں درست طریقے سے؟ سٹیلا؟ کوئی خیال؟ [سٹیلا] مجھے یقین نہیں ہے. >> یقین نہیں ہے. ڈینیل؟ خیال؟ ٹھیک ہے. یہ پتہ چلتا ہے کیا یہاں ہو رہا ہے جب ہم پروگرام بھاگ گیا ہے اور ہم seg غلطی ہے، جب آپ پہلی بار کے لئے پروگرام، ڈینیل بھاگ گیا، کیا تم نے یہ کسی بھی کمانڈ لائن کے دلائل دے؟ [ڈینیل] نہیں. نہیں. >> اس صورت میں، کیا argv کی قیمت ہے [1] >> کوئی قیمت نہیں ہے. >> حق ہے. ٹھیک ہے، کوئی مناسب سٹرنگ کی قیمت ہے. لیکن وہاں کوئی قیمت نہیں ہے. کیا قیمت ہے جو وہاں میں جمع ہو جاتا ہے؟ >> ایک ردی کی ٹوکری کی قیمت ہے؟ >> یہ یا تو ردی کی ٹوکری قدر ہے یا اس کیس میں، argv صف کے آخر ہمیشہ اتارنا null ساتھ ختم کیا جاتا ہے. تو جو اصل میں جمع ہو گئے شہوت انگیز null ہے. دوسرا طریقہ ہے بلکہ یہ سوچ کے ذریعے سے اس کو حل کرنے، یہ چھپائی باہر کرنے کی کوشش کریں. یہی وہ جگہ ہے جہاں میں یہ کہہ رہا ہوں کہ GDB کا استعمال کرتے ہوئے بہت اچھا ہے، کیونکہ آپ تمام متغیر پرنٹ کر سکتے ہیں، تمام اقدار جو آپ چاہتے ہیں اس ہاتھ بانکا P-کمانڈ کا استعمال کرتے ہوئے. تو اگر میں پی ٹائپ کریں، اور پھر میں ایک متغیر یا ایک متغیر کے نام کی قدر ٹائپ کریں، ، argc کا کہنا ہے کہ، میں نے دیکھا ہے کہ argc 1 ہے. اگر میں باہر argv پرنٹ کرنا چاہتے ہیں [0]، میں نے ایسے ہی ایسا کر سکتے ہیں. اور جیسا کہ ہم نے دیکھا، argv [0]، ہمیشہ اپنے پروگرام کا نام ہے ہمیشہ کارکردگی کے نام پر. آپ کو یہاں دیکھ کر یہ مکمل راستہ کا نام مل گیا ہے. میں نے بھی argv [1] اور دیکھتے ہیں کیا ہوتا ہے. پرنٹ کر سکتے ہیں یہاں ہم صوفیانہ قدر کا اس طرح ہے. ہم اس 0x0 ہے. مدت کے آغاز میں جب ہم شش اعشاری تعداد کے بارے میں بات کی تو یاد رکھیں؟ یا ہے کہ کس طرح hex میں 50 کی نمائندگی کرنے کے بارے میں 0 pset کے آخر میں چھوٹا سا سوال ہے؟ جس طرح سے ہم CS میں hex تعداد لکھ، صرف خود کو الجھانے نہیں دشملو تعداد کے ساتھ ہے، ہم ہمیشہ ان کے 0x کے ساتھ سابقہ. تو یہ 0x سابقہ ​​ہمیشہ صرف کا مطلب ہے کہ ایک شش اعشاری تعداد کے طور پر مندرجہ ذیل تعداد کی تشریح، ایک تار کے طور پر نہیں، ایک دشملو تعداد کے طور پر نہیں، نہیں ایک بائنری تعداد کے طور پر. چونکہ 5-0 تعداد شش اعشاری میں ایک درست تعداد ہے. اور دشملو، 50 میں ایک بڑی تعداد ہے. تو یہ ہے کہ ہم کس طرح disambiguate. تو 0x0 ذرائع شش اعشاری 0،، جو بھی ہے دشملو 0 0 بائنری. یہ صرف قدر 0 ہے. یہ پتہ چلا ہے کہ یہ وہی ہے جو اتارنا null ہے، اصل میں یاد میں. شہوت انگیز null صرف 0 ہے. یہاں عنصر argv پر محفوظ ہے [1]، شہوت انگیز null ہے. تو ہم شہوت انگیز null سٹرنگ پر ہمارے "CS50 پتھروں" سٹرنگ کا موازنہ کرنے کی کوشش کر رہے ہیں. تو، شہوت انگیز null محولہ لقب ضبطی، شہوت انگیز null چیزوں تک رسائی کی کوشش کر ان لوگوں کو عام طور پر انقطاع کی غلطی یا دوسرے بری چیزیں ہو کسی قسم کی وجہ سے جا رہے ہیں. اور یہ پتہ چلا ہے کہ strcmp کو دیکھنے کے لئے چیک کرنے کے لیے نہیں ہے یا نہیں آپ کو ایک قدر ہے کہ لوڈ، اتارنا null ہے میں منظور کر لیا ہے. بلکہ، یہ صرف آگے جاتا ہے، اس کی بات کرنے کی کوشش کرتا ہے، اور اگر اس گناہ seg گناہ seg، اور یہ آپ کا مسئلہ ہے. تم جاؤ اسے درست کرنے کی ہے. واقعی جلدی، ہم اس مسئلہ کو کس طرح ٹھیک ہو سکتا ہے؟ شارلٹ؟ [شارلٹ] آپ چیک کرنے کے لیے اگر کا استعمال کرتے ہوئے کر سکتے ہیں. تو اگر argv [1] شہوت انگیز null ہے، 0 ==، تو 1 واپس یا کچھ [unintelligible]. >> جی ہاں. تو وہ ایک عظیم ایسا کرنے کا ایک طریقہ ہے، جیسا کہ ہم دیکھ کر چیک کر سکتے ہیں، قدر ہم ہو strcmp میں منتقل کرنے کی، argv [1]، شہوت انگیز null، ہے؟ اگر یہ شہوت انگیز null ہے، تو ہم ٹھیک کہتے ہیں، اسقاط حمل ہو سکتا کر سکتے ہیں. ایک زیادہ عام ایسا کرنے کا طریقہ argc قدر کو استعمال کرنے کے لئے ہے. آپ کا اہم آغاز میں یہاں دیکھ سکتے ہیں، ہم کہ پہلے ٹیسٹ لپ ہے کہ ہم عام طور پر جب ہم کمانڈ لائن کے دلائل کا استعمال کرتے ہیں، جو ٹیسٹ یا ہمارے argc قدر نہیں ہے جو ہم توقع ہے. اس صورت میں، ہم کم از کم دو دلائل کی توقع کر رہے ہیں، پروگرام کے نام کے علاوہ دوسرے ایک ہے. کیونکہ ہم دوسری دلیل کو یہاں استعمال کے بارے میں ہے. تو ہماری strcmp کال سے پہلے ٹیسٹ کے کچھ قسم سے پہلے ہے، کہ ٹیسٹ یا نہیں argv کم سے کم 2 ہے، بات کے اسی طرح بھی کرے گی. ہم دیکھتے ہیں اگر اس پروگرام کو دوبارہ چلانے کی طرف سے کام کرتا ہے کر سکتے ہیں. آپ GDB، جو بہت اچھا ہے کے اندر اندر آپ کے پروگرام کو ہمیشہ کو دوبارہ شروع کر سکتے ہیں. آپ چلاتے ہیں، اور جب تم نے دلائل میں آپ کے پروگرام میں منتقل کر سکتی ہیں، تم نے انہیں جب آپ اسے چلانے کے فون میں گزرتے ہیں، نہیں ہے جب آپ کو GDB بوٹ. اس طرح آپ کو مختلف دلائل کے ساتھ آپ کے پروگرام میں ہر وقت invoking رکھ سکتے ہیں. تو چلاتے ہیں، یا پھر، میں ر ٹائپ کر سکتے ہیں، اور ہم دیکھتے ہیں کیا ہوتا ہے اگر ہم ٹائپ "ہیلو". یہ آپ کو ہمیشہ سے پوچھیں گے کہ آپ اسے شروع سے دوبارہ شروع کرنا چاہتے ہیں کریں گے. عام طور پر، آپ اسے شروع سے دوبارہ شروع کرنا چاہتے ہیں. اور اس وقت، اس کے دوبارہ چلنا اسے دوبارہ، اسے باہر پرنٹ پروگرام کہ ہم چل buggy1 رہے ہیں دلیل ہیلو، اور یہ اس معیار کو پرنٹ ہے، اس کا کہنا ہے کہ، "تم D ملتا ہے،" اداس چہرہ. لیکن ہم غلطی seg نہیں تھا. نے کہا کہ اس عمل کو عام طور پر باہر ہو. تو یہ بہت اچھا لگ رہا ہے. کوئی seg زیادہ غلطی ہے، ہم نے اسے ماضی بنا دیا ہے، تو ایسا لگتا ہے جیسے کہ یقینا seg غلطی مسئلے جو ہم حاصل کر رہے ہیں. بدقسمتی سے، یہ ہمیں بتاتا ہے کہ ہم نے ایک D. ہو رہے ہیں ہمیں واپس جانا اور کوڈ کو دیکھو کر سکتے ہیں اور دیکھو کہ وہاں کیا جا رہا تھا اعداد و شمار کیا تھا - یہ ہمیں کیوں کہہ رہا ہوں کہ ہم ایک D. تھی چلو دیکھتے ہیں، یہاں اس printf کہہ رہے ہیں کہ آپ ایک ڈی ہے اگر ہم فہرست ٹائپ کریں، جیسا کہ آپ کے پاس ٹائپ کی فہرست رکھنے کے لئے، یہ آپ کے پروگرام کے ذریعے نیچے iterating رکھتا ہے، تو یہ آپ کو آپ کے پروگرام کی پہلی چند لائنیں دکھائیں گے. اس کے بعد آپ کو اگلے چند سطریں، اور اگلے حصہ اور اگلے حصہ دکھائیں گے. اور نیچے جانے کی کوشش کر رہے رکھیں گے. اور اب ہم "لائن 16 تعداد حد سے باہر ہے." ملے گی کیونکہ یہ صرف 15 لائنوں ہیں. اگر آپ اس نقطہ حاصل کرنے کے لئے اور آپ کی سوچ، "میں کیا کروں؟" آپ کی مدد کی کمانڈ کا استعمال کر سکتے ہیں. کا استعمال کریں اور اس کے بعد کی مدد سے یہ ایک کمانڈ کے نام پر دے. اور تم دیکھ کر GDB ہمیں ساری چیزیں اس طرح دیتا ہے. یہ کہتا ہے، انہوں نے کہا کہ بغیر کسی دلیل کے ساتھ، کے بعد یا اس کے ارد گرد گزشتہ لسٹنگ دس لائنوں کی فہرست ہے. فہرست - سے پہلے دس لائنوں کی فہرست - " تو فہرست مائنس کا استعمال کرتے ہوئے کرنے کی کوشش کریں. اور یہ 10 لائنیں گزشتہ کی فہرست، آپ کی فہرست کے ساتھ کے ارد گرد ایک تھوڑا سا ادا کر سکتے ہیں. آپ کی فہرست، فہرست کر سکتے ہیں - آپ کو بھی فہرست 8 فہرست کی طرح ایک نمبر دے کر سکتے ہیں، اور یہ 8 لائن کے ارد گرد 10 لائنیں کی فہرست گا. تمہیں دیکھ کر اور یہاں کیا ہو رہا ہے آپ کو ایک اور اگر آسان ہے کر سکتے ہیں. اگر آپ کو CS50 چٹٹانوں میں ٹائپ کریں، اسے باہر پرنٹ آپ ایک A. " ورنہ باہر پرنٹ "تم ایک D." مایوس کن شہر ہے. ٹھیک ہے. جی ہاں؟ [ڈینیل]، تو جب میں بغیر واوین کے CS50 پتھروں کر کرنے کی کوشش کی اس کا کہنا ہے کہ "تم ایک D." میں نے کی قیمت درج کرنے کی ضرورت ہے یہ کام کرنے کے لئے حاصل کرنے کے لئے، ایسا کیوں ہے؟ >> جی ہاں. یہ پتہ چلا ہے کہ جب - یہ ایک اور مذاق تھوڑا tidbit ہے - ، جب آپ اس پروگرام چلاتے ہیں، اگر ہم اسے چلانے اور ہم CS50 چٹٹانوں میں ٹائپ جیسا کہ ڈینیل کہا کہ انہوں نے کیا تھا، اور تمہیں مارا درج کریں یہ اب بھی کا کہنا ہے کہ ہم نے ایک D. حاصل اور سوال یہ کیوں ہے؟ اور یہ پتہ چلا ہے کہ ہمارے دونوں ٹرمینل اور GDB ان دو الگ الگ دلائل کے طور پر تجزیہ. جب وہاں ایک خلا ہے، کہ تقاضا ہے کیونکہ پہلی دلیل ختم ہو گئی، اگلے دلیل یہ ہے شروع کرنے کے بارے میں ہے. دو حصوں میں لوگوں کو جمع کرنے کا طریقہ، یا افسوس ہے، ایک دلیل میں واوین کے استعمال کرنے کے لئے ہے. تو اب، اگر ہم اس کی قیمت درج کرنے میں ڈال دیا اور اس کو دوبارہ چلائیں، ہم ایک A. تو recap، کوئی کوٹس، CS50 اور پتھروں کو دو الگ الگ دلائل کے طور پر تجزیہ کر رہے ہیں. کی قیمت درج کرنے کے ساتھ، یہ ایک مکمل طور پر دلیل کے طور پر تصریف ہے. ہم ایک توڑ مقام کے ساتھ اس کو دیکھ سکتے ہیں. اب تک ہم نے ہمارے پروگرام چل رہا ہے، اور یہ ہے چل رہا ہے یا تو غلطی یا ہٹ میں ایک خامی seg تک یا جب تک اس سے باہر ہے اور تمام بالکل ٹھیک ہو گیا ہے. یہ ضروری نہیں ہے، کبھی کبھی سب سے زیادہ مفید بات کی وجہ آپ کو اپنے پروگرام میں ایک خامی ہے، لیکن یہ انقطاع کی غلطی کی وجہ سے نہیں ہے. روکنے پروگرام یا اس طرح کچھ بھی نہیں جس کے نتیجے میں ہے. آپ کے پروگرام کو روکنا کسی خاص نقطہ پر GDB راستہ توڑ مقام مقرر ہے. تم نے ایک تقریب کے نام پر توڑ مقام کی ترتیب کی طرف سے یا تو کر سکتے ہیں یا آپ کے کوڈ کا ایک مخصوص لائن پر ایک توڑ مقام مقرر کر سکتے ہیں. میں تقریب کے نام پر breakpoints مقرر کرنا چاہتے ہیں، کیونکہ - آسان یاد، اور اگر آپ واقعی میں جاؤ اور تھوڑا سا اپنے منبع کوڈ کو تبدیل تو آپ کا توڑ مقام اپنا کوڈ کے اندر اندر ایک ہی جگہ پر اصل میں رہیں گے. جبکہ اگر آپ لائن نمبرز کا استعمال کرتے ہوئے کر رہے ہیں، اور لائن نمبرز تبدیل کیونکہ آپ کچھ کوڈ شامل یا حذف، تو آپ breakpoints تمام پوری طرح سے کر رہے ہیں مصیبت میں. سب سے زیادہ عام چیزیں مجھے کیا کرنا میں سے ایک اہم تقریب پر توڑ مقام مقرر کیا گیا ہے. اکثر میں GDB بوٹ کریں گے، میں ب اہم ٹائپ کریں، درج کریں مارا، اور کریں گے کہ ایک توڑ مقام مقرر کریں گے اہم تقریب ہے جس میں صرف کا کہنا ہے کہ، "پروگرام جیسے ہی تم چلنا شروع روک دیں، اور اس طرح، جب میں اس کے ساتھ، کا کہنا ہے کہ، CS50 پتھروں کے طور پر میرا پروگرام چلائیں دو دلائل درج کریں مارا یہ بنیادی کام ہو جاتا ہے اور یہ بہت پہلی سطر میں رک جاتا ہے، ٹھیک ہے اس سے پہلے کہ یہ strcmp تقریب کی تشخیص کرتا ہے. چونکہ میں روک دیئے گئے ہوں، اب میں شروع کر سکتے ہیں کے ارد گرد mucking اور دیکھ کر کیا ہو رہا ہے مختلف متغیر ہے جو اپنے پروگرام میں منظور ہیں میں سے سب کے ساتھ. یہاں میں argc پرنٹ اور دیکھو کیا ہو رہا ہے کر سکتے ہیں. دیکھو کہ argc 3 ہے، کیونکہ یہ اس میں 3 مختلف اقدار کی ہے. یہ اس پروگرام کا نام ہے، یہ پہلی دلیل اور دوسری دلیل مل گیا ہے. ہم ان argv دیکھ کر پرنٹ کر سکتے ہیں [0]، argv [1]، اور argv [2]. تو اب تم کیوں اس strcmp کال کرنے میں ناکام ہو رہا ہے بھی دیکھ سکتے ہیں، کیونکہ تم نے دیکھا ہے کہ یہ تقسیم نے دو الگ الگ دلائل میں CS50 اور پتھروں. اس وقت، ایک بار تم نے توڑ مقام متاثر کیا ہے، آپ کو اپنے پروگرام کے ذریعے قدم جاری رکھ سکتے ہیں لائن کی طرف سے لائن، اپنے پروگرام کو دوبارہ شروع کرنے کے خلاف ہے. اگر ایسا ہے تو آپ کو اپنے پروگرام کو دوبارہ شروع کرنا نہیں چاہتے ہیں یہاں سے جاری، آپ کو آگے کمانڈ کا استعمال اور چلتی رہیں پروگرام کے آخر تک کر سکتے ہیں. جیسا کہ اسے یہاں کیا. تاہم، اگر میں پروگرام، CS50 پتھر کو دوبارہ شروع، یہ میرا توڑ مقام دوبارہ مار دیتی ہے، اور اس وقت، اگر میں صرف پروگرام کے باقی کے ذریعے پورے راستے نہیں چاہتے ہو، میں اگلے کمانڈ کا استعمال کر سکتے ہیں، جس میں (ن) کے ساتھ بھی abbreviate. اور پروگرام لائن کے ذریعے اس لائن کی طرف سے عہدہ چھوڑ دیں گے. تو کیا تم دیکھتے کے طور پر چیزوں کو پھانسی، کے طور پر متغیر تبدیلی، کے طور پر چیزوں کو اپ ڈیٹ کرنے کے لئے کر سکتے ہیں. جو بہت اچھی ہے. دیگر ٹھنڈی چیز ہے، بلکہ ایک ہی حکم ہے اور اور اس سے زیادہ سے زیادہ ایک بار پھر دہرا سے اگر آپ نے ابھی درج کریں مارا - لہذا آپ کو یہاں دیکھ کر میں کچھ میں ٹائپ نہیں کیا ہے - اگر میں مارا درج کریں، یہ گزشتہ کمانڈ اعادہ کروں گا، یا پچھلے GDB حکم ہے کہ میں صرف اندر ڈال میں مارنے درج کریں اور لائن کی طرف سے اپنے کوڈ کی لائن کے ذریعے نکلنے رکھیں گے کر سکتے ہیں. میں تم لوگ دوسری چھوٹی گاڑی کے پروگراموں کی جانچ پڑتال کے ساتھ ساتھ جانے کے لئے حوصلہ افزائی کریں گے. ہم نے ان تمام لوگوں کو آج کے حصے میں کے ذریعے حاصل کرنے کا وقت نہیں ہے. ماخذ کوڈ وہاں ہے، لہذا آپ کو دیکھو کیا ہو رہا ہے کی طرح کر سکتے ہیں مناظر اگر آپ واقعی پھنس جاتے ہیں کے پیچھے، لیکن کم از کم، صرف GDB بوٹنگ عمل، پروگرام چلا رہا ہے جب تک کہ وہ تم پر ٹوٹ جاتا ہے، backtrace ہو رہی ہے، باہر figuring کیا کام حادثے میں تھا، کیا لائن پر تھا، اور کچھ متغیر اقدار چھپائی، صرف اس لئے آپ کو اس کے لئے ایک احساس ملے، کیونکہ اس میں اس کا تم سے آگے جا واقعی میں مدد ملے گی. اس وقت، ہم GDB سے باہر چھوڑ جا رہے ہیں جو آپ کو چھوڑ کا استعمال کرتے ہوئے یا صرف ق. اگر آپ پروگرام اب بھی چل کے وسط میں ہے، اور اس سے باہر نہیں ہے، کیا آپ ہمیشہ سے پوچھیں گے، "کیا آپ کو اس بات کا یقین کر لیں کہ آپ واقعی چھوڑ کرنا چاہتے ہیں؟" تم ہاں مار کر سکتے ہیں. اب ہم اگلے مسئلہ ہے ہم نے، جو کہ بلی پروگرام ہے کو دیکھنے کے لئے جا رہے ہیں. اگر آپ کو منتقل کیا جا رہا ہے اور پائپ مختصر دیکھتے تم نے دیکھا، کہ ٹومی اس پروگرام کا استعمال کرتا ہے. ہے جو بنیادی طور پر سکرین پر ایک فائل کی تمام پیداوار پرنٹ. تو اگر میں بلی چلاتے ہیں، اصل میں ایک بلٹ میں پروگرام ہے آلات، اور اگر آپ Macs ہے آپ کو آپ میک پر یہ بھی کرتے ہیں، اگر آپ کو ٹرمینل کھول کر سکتے ہیں. اور ہم - بلی دو، کا کہنا ہے کہ، cp.c، اور مارا درج کریں. اگر تو اس نے یہ کیا ہے، ہم نے تھوڑا سا سکرال کریں اور جہاں ہم لائن دیکھ کر بھاگ گیا، یا جہاں ہم بلی کمانڈ میں بھاگ گیا، یہ لفظی صرف ہمارے سکرین پر طباعت cp.c کے مندرجات ہیں. ہم اسے دوبارہ چلائیں اور آپ کو ایک سے زیادہ فائلوں میں ڈال مل کر کر سکتے ہیں کر سکتے ہیں. تو آپ کو بلی cp.c کرنا، اور تو ہم cat.c فائل بھی سلسلہ بندی کرنا کر سکتے ہیں کر سکتے ہیں، جو پروگرام ہم لکھ رہے ہیں ہے، اور یہ دونوں فائلوں کو واپس پرنٹ ہمارے سکرین کی حمایت کریں گے. اگر ایسا ہے تو ہم نے تھوڑا سا سکرال، ہم دیکھتے ہیں کہ ہم اس بلی cp.c، cat.c جب بھاگ گیا، سب سے پہلے یہ CP فائل طباعت، اور تو اس کے نیچے، یہ cat.c فائل طباعت ٹھیک ہے یہاں ذیل. ہم یہ تو صرف اپنے پاؤں گیلے حاصل کرنے کے لئے استعمال کرنے کے لئے جا رہے ہیں. سادہ ٹرمینل پر پرنٹنگ کے ساتھ کے ارد گرد کھیلیں دیکھو، وہ کس طرح کام کرتا ہے. اگر تم لوگ gedit cat.c کے ساتھ کھول مارا، درج کریں، کیا آپ پروگرام ہے کہ ہم لکھنے کے بارے میں دیکھ سکتے ہیں. تاکہ ہم اس اچھی بوائلر پلیٹ شامل کر دیا ہے، ہم وقت کہ ٹائپ خرچ کرنے کی ضرورت نہیں ہے. ہم بھی دلائل کی تعداد کو چیک کرنے کے لیے اندر منظور ہم ایک اچھا استعمال پیغام پرنٹ کریں. اس طرح کی بات کہ پھر ہم طرح کیا گیا ہے کے بارے میں بات کر ہے، یہ تقریبا پٹھوں میموری کی طرح ہے. چیزیں اسی طرح کر رہے رکھنے کے لئے یاد رکھیں اور ہمیشہ مددگار پیغام کی کسی قسم چھپائی تاکہ لوگوں کو معلوم ہے کہ کس طرح آپ کے پروگرام کو چلانے کے لئے. بلی کے ساتھ، یہ بہت آسان ہے، ہم صرف مختلف دلائل کے ذریعے جانے کے لئے جا رہے ہیں جو کہ ہمارے پروگرام منظور کیا گیا اور ہم نے پرنٹ جا رہے ہیں ایک وقت میں ایک کی سکرین پر ان کے باہر مواد. کے لئے فائلوں کو پردے پر پرنٹ کرنے کے لئے، ہم بہت ہی کچھ کرنے کے لئے جا رہے ہیں جو ہم نے کے لئے گئے تمام سوالات کے اختتام پر کیا. کوئز، کہ اس پروگرام کرایہ کے آخر میں، ہم نے ایک فائل کو کھولنے کے تھے، اور پھر ہم نے اس سے پرنٹ کرنے کے لئے تھا. اس صورت میں، ہم نے ایک فائل کو کھولنے کے جا رہے ہیں، اور ہم اس سے بجائے پڑھنے جا رہے ہیں. اس کے بعد ہم نے کی بجائے ایک فائل کو پرنٹ کرنے کے لئے، جا رہے ہیں، ہم پردے پر پرنٹ کرنے کے لئے جا رہے ہیں. تو سکرین آپ سب printf سے پہلے کیا ہے سے چھپائی. تو وہ بھی پاگل نہیں ہے. لیکن ایک فائل کو پڑھنے کے عجیب قسم کا ہے. یہ تھوڑا سا کے ذریعے ہم ایک وقت میں چلے جائیں گے. اگر تم لوگ آپ کے کوئز، 33 مسئلہ کہ گزشتہ مسئلہ میں واپس جاتے ہیں، پہلی سطر ہے کہ ہم یہاں کیا کرنے جا رہے ہیں، فائل کھولنے، کیا ہم وہاں کیا اسی طرح ہے. سٹیلا تو، کی طرح، جب ہم ایک فائل کو کھولنے کے اس لائن کو نظر آتی ہے؟ [سٹیلا] کیپٹل فائل * فائل - >> ٹھیک ہے. >> - fopen کے برابر ہے. >> جی ہاں. جو اس صورت میں ہے؟ یہ تبصرہ میں ہے. >> یہ تبصرہ میں ہے؟ argv [i] اور R؟ بالکل ٹھیک ہے. >> ٹھیک ہے. تو سٹیلا بالکل صحیح ہے. یہ وہی ہے جو لائن کی طرح لگتا ہے. ہم ایک فائل ندی متغیر کو حاصل کرنے کے لئے، ایک فائل * میں محفوظ جا رہے ہیں، تو تمام بڑے حروف فائل فائل، *، اور اس متغیر کے نام پر ہو جائے گا. جو ہمیں پسند ہے ہم نے اسے فون کر سکتا ہے. ہم یہ first_file، یا file_i کہہ سکتے ہیں، ہم جو کچھ بھی کرنا چاہتے ہیں. اور اس کے بعد کی فائل کے نام کو کمانڈ لائن پر اس پروگرام میں منظور کیا گیا تھا. تو یہ argv میں محفوظ ہے [میں] اور پھر ہم پڑھ کے موڈ میں اس فائل کو کھولنے کے لئے جا رہے ہیں. اب جب کہ ہم نے فائل کھولی ہے، بات یہ ہے کہ ہم ہمیشہ یاد ہے کیا ہے ہم نے ایک فائل جب بھی کھول لیا ہے؟ بند کرو. تو Missy، ہم ایک فائل کو کس طرح بند کر سکتا ہوں؟ [Missy] fclose (فائل) >> fclose (فائل). بالکل. بہت اچھا ہے. ٹھیک ہے. اگر ہم اس پر نظر تبصرہ یہاں، اس کا کہنا ہے کہ، "اوپن argv [i] اور اس کے مندرجات کو stdout پر پرنٹ کریں." سٹینڈرڈ ایک عجیب نام ہے. Stdout صرف یہ کہہ رہا ہمارا راستہ ہے ہم ٹرمینل پر پرنٹ کرنا چاہتے ہیں، ہم اسے معیاری پیداوار کے سلسلے میں پرنٹ کرنا چاہتے ہیں. ہم نے اس تبصرہ سے چھٹکارا اصل میں یہاں حاصل کر سکتے ہیں. میں اس کی کاپی کرنے کے لئے اور اس کے بعد ہے کہ ہم نے کیا کیا پیسٹ جا رہا ہوں. اس وقت، اب ہم بٹ کی طرف سے فائل سا پڑھا ہے. ہم نے پڑھنے فائلوں کے طریقوں میں سے ایک جوڑے پر بحث کی ہے. کون اپنے پسندیدہ اب تک ہیں؟ کون طریقوں تم نے دیکھا ہے یا ہے، آپ فائلوں کو پڑھنے کے لئے یاد رکھیں؟ [ڈینیل] fread؟ fread >>؟ تو fread سے ایک ہے. جمی، آپ کو کسی بھی دوسروں کو جانتے ہیں؟ [جمی] نمبر >> ٹھیک ہے. نہیں. شارلٹ؟ الیگزینڈر؟ کوئی دوسروں؟ ٹھیک ہے. تو دوسرے ہیں fgetc ہیں، ایک ہے کہ ہم نے ایک بہت استعمال کریں گے. بھی fscanf، تم لوگ یہاں ایک نمونہ دیکھ؟ وہ سب F ساتھ شروع کرتے ہیں. ایک فائل کے ساتھ کیا کرنے کے لئے کچھ ہے. آمدید fread ہے، fgetc، fscanf. یہ پڑھنے کے افعال میں سے سب. لکھ ہم fwrite ہے، ہم fgetc کے بجائے fputc ہے. ہم نے بھی fprintf جیسا کہ ہم کوئز پر دیکھا ہے. چونکہ یہ ایک ایسا مسئلہ ہے جس ميں ایک فائل سے پڑھنے ہے، ہم ان تین کے افعال میں سے ایک کو استعمال کرنے کے لئے جا رہے ہیں. ہم ان افعال کو یہاں استعمال نہیں کرنے جا رہے ہیں. یہ کام کرتا ہے تمام معیاری لائبریری I / O میں پائے جاتے ہیں. تو اگر آپ کو اس پروگرام کے سب سے اوپر کی طرف دیکھو، آپ دیکھیں گے کہ ہم نے پہلے سے ہی معیاری لائبریری I / O کے لئے ہیڈر فائل شامل کر دیا ہے کر سکتے ہیں. اگر ہم معلوم کرنا چاہتے ہیں جو ایک ہم استعمال کرنا چاہتے ہیں، ہم نے ہمیشہ انسان صفحات کھول سکتے ہیں. تو ہم انسان stdio ٹائپ کر سکتے ہیں اور سی میں stdio ان پٹ اور پیداوار کے افعال کے بارے میں تمام پڑھنے اور ہم نے پہلے سے ہی اوہ، دیکھو دیکھ سکتے ہیں. یہ fgetc ذکر کر رہا ہے، یہ fputc ذکر ہے. تو آپ نے تھوڑا سا ڈرل اور کو دیکھنے کے کر سکتے ہیں، کا کہنا ہے کہ، fgetc اور اس شخص کے صفحے کو دیکھو. تم نے دیکھا کہ یہ دوسرے کے افعال میں سے ایک مکمل جھوبڈ کے ساتھ جاتا ہے کر سکتے ہیں: fgetc، fgets، getc، getchar، ہو جاتا ہے، ungetc، اور حروف اور ڈور کی اس کے ان پٹ. تو یہ ہے کہ ہم کس طرح معیاری ان پٹ سے فائلوں سے حروف اور ڈور میں پڑھتے ہیں، جو صارف کی طرف سے بنیادی طور پر ہے. اور یہ ہے کہ ہم کس طرح اس کے اصل C. میں تو یہ GetString اور GetChar افعال کا استعمال کرتے ہوئے نہیں ہے کہ ہم CS50 لائبریری سے استعمال کیا ہے. ہم طریقوں میں سے ایک جوڑے میں اس مسئلہ پر کیا کرنے جا رہے ہیں تاکہ آپ کو کرنے کے دو مختلف طریقوں سے دیکھ سکتے ہیں. دونوں fread تقریب ہے کہ ڈینیل کا ذکر کیا اور fgetc اچھا ایسا کرنے کے طریقے ہیں. مجھے لگتا ہے کہ fgetc تھوڑا آسان ہے، کیونکہ یہ صرف ہے، جیسا کہ تم نے دیکھا، ایک دلیل، فائل، * کہ ہم کردار سے پڑھنے کی کوشش کر رہے ہیں، اور اس کی واپسی قیمت ایک int ہے. اور یہ تھوڑا مبہم، صحیح ہے؟ کیونکہ ہم نے ایک کردار ہو رہے ہیں، تو یہ واپسی کیوں نہیں ایک چار ہے؟ تم لوگ کیوں یہ ایک چار واپس نہیں ہو سکتی ہے پر کوئی خیال ہے؟ [Missy جوابات، unintelligible] جی ہاں >>. تو Missy بالکل صحیح ہے. اگر یہ ASCII ہے، تو اس عددی ایک حقیقی چار نقشے سکتا ہے. ASCII کردار ہو سکتے ہیں، اور یہ ٹھیک ہے. یہی ہے کیا ہو رہا ہے. ہم ایک int کا استعمال کرتے ہوئے صرف کیونکہ یہ زیادہ بٹس ہے رہے ہیں. یہ حروف سے بڑا ہے، ہمارے چار میں صرف 8 بٹس ہے، کہ ہماری 32 بٹ مشینیں 1 بائٹ. اور ایک int علاقے کے تمام 4 'بائٹس مالیت ہے. اور یہ پتہ چلا ہے کہ طرح fgetc کام اگر ہم اپنے مختصر میں اس آدمی کو صفحے کو تھوڑا سا میں ذیل میں سکرال، پورے راستے ذیل میں سکرال. یہ پتہ چلا ہے کہ وہ نامی اس خاص مسل اختتام قیمت کا استعمال کرتے ہیں. یہ fgetc تقریب کی واپسی کی قیمت کے طور پر ایک خاص مسلسل ہے آپ کو فائل کے آخر جب بھی مارا یا اگر آپ کو کوئی غلطی ملتی اور یہ پتہ چلا ہے کہ مسل اختتام کے ساتھ ان موازنہ کو مناسب طریقے سے کرنا، آپ کو ایک int میں معلومات کی اضافی رقم ہے جو کہ آپ چاہتے ہیں ایک چار متغیر کا استعمال کرتے ہوئے کی مخالفت کی. اگرچہ fgetc مؤثر طریقے سے ایک فائل سے ایک کردار ہو رہی ہے، آپ کو یاد ہے کہ یہ ایسی چیز ہے جس قسم int آپ کو واپس آ رہا ہے کرنا چاہتے ہیں. اس نے کہا کہ، یہ کافی استعمال کرنے کے لئے آسان ہے. یہ ہمیں ایک کردار دینے جا رہا ہے، تو ہم سب پر واجب ہے فائل پوچھتے رہتے، "مجھے اگلے کردار دے دو، مجھے اگلے کردار دے، آپ کے وزٹرز کا ریکارڈ رکھا اگلے کردار دے، جب تک ہم فائل کے آخر میں حاصل کرنے کے لئے. اور ایک کردار میں ہماری فائل سے ایک وقت میں ھیںچو گا، اور ہم پھر ہم نے اس کے ساتھ جو بھی پسند کر سکتے ہیں. ہم اسے جمع کر سکتے ہیں، ہم اسے ایک تار میں اضافہ، ہم اسے پرنٹ کر سکتے ہیں کر سکتے ہیں. اس کے کسی بھی کیا. ، واپس Zooming اور ہماری cat.c پروگرام واپس جا اگر ہم fgetc کو استعمال کرنے کے لئے جا رہے ہیں، ہم کوڈ کا یہ اگلی لائن کس طرح رجوع ہو سکتا ہے؟ ہم استعمال کرنے کے لئے جا رہے ہیں - fread تھوڑا سا مختلف کچھ کروں گا. اور اس وقت، ہم صرف fgetc ایک وقت میں ایک کردار حاصل کرنے کے لئے استعمال جا رہے ہیں. ایک مکمل فائل پر عملدرآمد کرنے کے لئے، ہمیں کیا کرنا ہے کر سکتے ہیں؟ کتنے حروف کو ایک فائل میں ہیں؟ بہت ہیں. تو آپ شاید ایک حاصل کرنے کے لئے کرنا چاہتے ہیں اور پھر ایک ہو جاؤ اور دوسرے اور دوسرے حاصل ہے. الگورتھم کس قسم کی کیا آپ کو لگتا ہے کہ ہم یہاں استعمال کرنے کے لئے ہو سکتا ہے ہے؟ کس طرح کی - [الیگزینڈر] لوپ کے لئے ایک؟ بالکل ٹھیک ہے. >> لوپ میں سے کچھ کی قسم. لوپ کے لئے ایک اصل میں اس معاملے میں ہے،. اور تم کہہ رہے تھے، یہ لگتا ہے کہ آپ پوری فائل پر ایک لوپ چاہتے ہیں، ایک وقت میں ایک کردار ہو. کیا کوئی رائے ہوں، اس طرح نظر سکتی ہے؟ [الیگزینڈر، unintelligible] >> ٹھیک ہے، بس کے وزٹرز کا ریکارڈ رکھا جائے گا. میرے انگریزی میں بتاو کہ تم کیا کرنے کی کوشش کر رہے ہیں؟ [الیگزینڈر، unintelligible] تو اس صورت میں، ایسا لگتا ہے ہم صرف پوری فائل پر لوپ کرنے کی کوشش کر رہے ہیں. [الیگزینڈر] تو میں > کے سائز - میں فائل کے سائز کے لگتا ہے، ہے نا؟ سائز - we'll صرف اس طرح لکھ. وقت کے لئے فائل کے سائز کے ہونے کے ناطے، میں + +. تو یہ پتہ چلا ہے کہ جس طرح سے آپ اس fgetc استعمال کرتے ہیں، اور یہ نیا ہے، یہ ہے کہ کوئی صرف ایک فائل کے سائز کے حاصل کرنے کے لئے آسان طریقہ ہے تعمیر ہے کہ تم سے پہلے دیکھا ہے، اس "sizeof" قسم کے ساتھ. جب ہم اس fgetc تقریب کا استعمال کرتے ہیں، ہم کسی قسم کے شروع کر رہے ہیں لوپ کے لئے نئے، funky اس میں نحو، جہاں صرف ایک بنیادی انسداد کا استعمال کرتے ہوئے کی بجائے کردار سے کردار کو جانا ہے، ہم ایک وقت میں ایک کردار ھیںچو جا رہے ہیں، ایک وقت میں ایک کردار، اور جس طرح سے ہم جانتے ہیں، ہم آخر میں ہیں ہے جب ہم نہیں حروف کی ایک مخصوص تعداد شمار ہے، لیکن جب کردار ہم سے نکالنے کہ فائل کے کردار کی خاص اختتام ہے. تو ہم ایسا کر سکتے ہیں - میں اس چوہدری کہتے ہیں، اور ہم اس کی ابتدا کے لئے جا رہے ہیں ہماری پہلی فائل سے باہر پہلا کردار حاصل کرنے کے لئے کال کے ساتھ. تو یہ یہیں حصہ ہے، یہ ایک کردار کی فائل کو باہر نکالنے کے لئے کی جا رہی ہے اور یہ متغیر چوہدری میں سٹور. ہم یہ کر رکھنے کے لئے جب تک ہم فائل کے آخر میں حاصل کرنے کے لئے جا رہے ہیں، جو ہم کردار کے لئے کیا جا رہا ہے کہ خصوصی مسل اختتام کردار کے برابر نہیں جانچ کی طرف سے کرتے ہیں. اور پھر چوہدری کرنے کے بجائے + +، جس کی قیمت صرف اضافہ کریں گے، اگر ایسا ہے تو ہم فائل سے باہر A، سرمایہ کا کہنا ہے کہ، پڑھا، CH + + ہمیں ب دے، اور پھر ہم سی اور پھر ڈی حاصل تھا. جو واضح طور پر بیان نہیں ہے جو ہم چاہتے ہیں. ہم یہاں کیا کرنا چاہتے ہیں یہ آخری سا میں ہم فائل سے اگلے کردار حاصل کرنے کے لئے کرنا چاہتی ہے. تو ہم فائل سے اگلے کردار کو کیسے حاصل کر سکتے ہیں؟ ہم فائل سے کس طرح سب سے پہلے کردار ہے؟ [Student کی] fgetfile؟ >> fgetc، یا، معاف کرنا، تم بالکل ٹھیک کہہ رہے تھے. میں نے اسے وہیں غلط ہجے شدہ. تو ہاں. چوہدری کرنے کے بجائے +، + ہم صرف fgetc (فائل) پھر فون کرنے جا رہے ہو اور ہمارے اسی چوہدری متغیر کے نتیجے میں سٹور. [Student کی سوال، unintelligible] >> یہ وہ جگہ ہے جہاں یہ فائل * لوگ خاص ہو. طرح وہ کام کرتے ہیں وہ ہے - جب آپ پہلی بار کھولنے - جب آپ پہلی بار وہ fopen کال کرنے، فائل * مؤثر طریقے سے فائل کے شروع میں ایک پوائنٹر کے طور پر کام کرتا ہے ہے. اور پھر ہر وقت آپ کہتے fgetc، یہ فائل کے ذریعے ایک کردار چلتا ہے. تو جب بھی آپ کو یہ کہتے ہیں، تو آپ کو ایک کردار کی طرف سے فائل پوائنٹر incrementing رہے ہیں. اور جب آپ دوبارہ fgetc، آپ اسے منتقل دوسرے کردار کر رہے ہیں اور دوسرے کردار اور دوسرے کردار اور ایک دوسرے کردار. [Student کی سوال، unintelligible] >> اور that's - جی ہاں. ہڈ کے تحت اس جادو کی طرح ہے. تم بس کے ذریعے incrementing رکھنے کے. اس وقت، آپ کو اصل میں ایک کردار کے ساتھ کام کرنے کے قابل ہیں. تو ہم یہ کس طرح کی سکرین پر، اب پرنٹ کر سکتے ہیں؟ ہم اسی printf بات یہ ہے کہ ہم پہلے کرتے تھے کو استعمال کر سکتے ہیں. کہ ہم تمام سمسٹر کا استعمال کرتے ہوئے. ہم printf فون کر سکتے ہیں، اور ہم کردار میں ایسے ہی منتقل کر سکتی ہیں. بلکہ printf کا استعمال کرتے ہوئے اور اس کی شکل سٹرنگ کرنے سے ایسا کرنے کا ایک اور راستہ ہے، ہم دوسرے کے افعال میں سے ایک بھی استعمال کر سکتے ہیں. ہم fputc، جس میں پردے پر ایک کردار پرنٹ کا استعمال کر سکتے ہیں، کے علاوہ اگر ہم fputc میں نظر آتے ہیں - مجھے تھوڑا سا زوم. ہم دیکھتے ہیں جو اچھی بات ہے یہ ہے کہ یہ کردار میں لیتا ہے کہ ہم پڑھ fgetc کا استعمال کرتے ہوئے، لیکن پھر ہم یہ ایک پرنٹ ندی دینا ہے. ہم putchar تقریب، جو معیار باہر سے براہ راست ڈال دیں گے بھی استعمال کر سکتے ہیں. تو وہاں مختلف اختیارات ہیں کہ ہم پرنٹنگ کے لئے استعمال کر سکتے ہیں کی ایک پوری چڑھانے ہیں. وہ معیاری لائبریری I / O میں سب. جب بھی آپ کو پرنٹ کرنا چاہتے ہیں - تو printf ڈیفالٹ کی طرف سے، ندی باہر خصوصی معیار پر پرنٹ کرنے کے لئے، گا، جو اس stdout ہے. تو ہم اس جادو قدر ہے، یہاں stdout کی قسم کے طور پر اس سے رجوع کر سکتے ہیں. افوہ. باہر نیم وقفہ ڈالو. یہ یہاں نئے، funky معلومات کے بہت کچھ ہے. اس کی ایک بہت بہت مہاوریدار احساس ہے کہ یہ کوڈ آن ہے میں ہے، کہ اس طرح لکھا ہے صرف اس لئے کہ یہ صاف ہے، پڑھنے میں آسان پڑھ رہا ہے. ایسا کرنے کے لئے بہت سے مختلف طریقوں سے، بہت سے مختلف کام کرتا ہے آپ استعمال کر سکتے ہیں ہیں، لیکن ہم بس سے ان اسی پیٹرن پر عمل کرتے ہیں. تو اگر آپ کے پاس آ رہے ہیں بار بار اس طرح کا کوڈ دیکھ سکتے نہیں رکھا جائے حیران کرتے ہیں. ٹھیک ہے. اس وقت ہم نے اس دن کے لئے کو توڑنے کے لئے کی ضرورت ہے. آنے کے لئے شکریہ. اگر آپ آن لائن ہیں دیکھ کے لئے شکریہ. اور ہم اگلے ہفتے آپ کو نظر آئے گا. [CS50.TV]