1 00:00:00,000 --> 00:00:02,730 [Powered by Google Translate] [খণ্ড 5: কম আরামদায়ক] 2 00:00:02,730 --> 00:00:05,180 [Nate 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 এটা দুই পূর্ণসংখ্যার সোয়াপিং সম্পর্কে সব ছিল. 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 নতুন swap হিসাবে কোড ফাংশন মাধ্যমে যায়. 21 00:01:20,250 --> 00:01:24,500 বিশেষ করে, কি আমরা এ খুঁজছেন - I'm এই রহমান দমন করা যাচ্ছে - 22 00:01:24,500 --> 00:01:29,650 বিশেষ করে, কি আমরা এ খুঁজছেন সেটি এই লাইন 6 অধিকার এখানে সংখ্যাযুক্ত. 23 00:01:29,650 --> 00:01:36,740 এবং এটি আগের সমস্যা শুধু সান্নিধ্য জন্য 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 যা কার্যকরভাবে আমাদের করতে swap ফাংশান থেকে একটি ফিরতি অধিকার এখানে. 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 আপেল টিভি মিরর, এবং আমরা সেখানে যান. ঠিক আছে. 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 এর ঠিকানা পাস একটি swap ফাংশন এবং খ. 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 সুতরাং যারা হয় মান হিসাবে পাশ করতে এবং a ও b আমাদের করতে swap রূপে আপ উপরে. 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 এখন, এই পয়েন্ট হয় যেখানে আমরা swap 'র সাথে এগিয়ে যান. 53 00:04:11,610 --> 00:04:14,520 তাই ল্যাপটপ আলোকসম্পাতের আবার ফিরে, 54 00:04:14,520 --> 00:04:21,079 আমরা দেখতে যে ভাবে কাজ করতে swap হল আমি প্রথম 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 রহমান আলোকসম্পাতের ফিরে যাও. 59 00:04:45,150 --> 00:04:51,690 যদি আমরা 10 মোকাবেলার যান, আমরা জানি যে ঠিকানা হল 10 x varible 60 00:04:51,690 --> 00:04:55,480 কারণ আমরা আমাদের বুলেট পয়েন্ট যে x মেমরির মধ্যে ঠিকানা হল 10 দ্বারা বলা হয়েছিল. 61 00:04:55,480 --> 00:05:00,180 তাই সেখানে আমরা, যাব মান, যা 1 পেতে পারেন হিসাবে আমরা আমাদের iPad-এ দেখুন, 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 আমাদের রহমান, যেখানে আমরা এই সামান্য আরো কংক্রিট করতে পারেন ফিরে আলোকসম্পাতের, 83 00:06:40,080 --> 00:06:44,070 এটা যদি আমি এখানে ঠিকানাগুলি সমস্ত নম্বর লিখুন সাহায্য করতে পারে. 84 00:06:44,070 --> 00:06:53,820 যাতে আমরা জানতে পারি যে y সময়ে, আমরা ঠিকানা 14 এ আছে, x এর ঠিকানা 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 তাই সব ভাল এবং বিশ্বের ভাল, যদিও আমরা এখন মুছে ফেলা x করেছেন. 92 00:07:39,560 --> 00:07:44,890 আমরা x এর মধ্যে আমাদের tmp পরিবর্তনশীল পুরোনো মান সংরক্ষিত আছে. 93 00:07:44,890 --> 00:07:50,210 সুতরাং আমরা পরের লাইন swap 'র সঙ্গে সম্পন্ন করতে পারবেন. 94 00:07:50,210 --> 00:07:53,030 আমাদের ল্যাপটপ ফিরে আলোকসম্পাতের. 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 রহমান যাও আলোকসম্পাতের ফিরে আরো একবার. 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 তারপর পরের লাইন কোর্স করুন যে, - 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 সুতরাং রহমান ফিরে আলোকসম্পাতের আরো একবার মাত্র, যাতে আপনি সম্পূর্ণ চিত্রটি দেখতে পারেন, 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 প্রচুর ছবি আঁকা, এই মত মেমরি ডায়াগ্রামে প্রচুর অঙ্কন খুব সহায়ক হয়, 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 নম্বর ফাইলটি আমি / 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 এটি dereferencing যখন আপনি একটি তারকা আগে ব্যবহার করার জন্য বলা হচ্ছে. 126 00:10:35,590 --> 00:10:38,820 কি এটি যখন আপনি আগে ampersand ব্যবহার হয়? 127 00:10:38,820 --> 00:10:43,140 >> আগে ampersand হয় অপারেটর এর ঠিকানা. 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 ampersand ঠিক হয় বলছে "ঠিকানা যার পরিবর্তনশীল 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 x করা. আমি ঠিকানা 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 এইসব বলছি ঠিকানা পেতে, কিন্তু তারা, যখন আপনি swap-র কার্যকারিতা সেগুলি প্রেরণ করার জন্য, 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 এখানে ভীতু ধরনের, বিভিন্ন জায়গায় এইজন্য & এবং *. 158 00:13:09,800 --> 00:13:13,180 >> ঠিক আছে. 159 00:13:13,180 --> 00:13:18,530 তাই ফিরে যাও সমস্যা 33, দায়ের আমি / 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 যদি আপনি একটি সি প্রোগ্রাম বা প্রোগ্রাম পাইথন, জাভা প্রোগ্রাম লিখতে চেয়েছিলেন, 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 এটার কাজ হল যে এটা অনুরূপ যাও - আমি বলতে চাচ্ছি, এটি মূলত একটি স্প্রেডশীট এর অনুকারী, 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, এবং তারপর Chan আছে. 182 00:14:54,670 --> 00:14:59,470 সমস্ত শেষ নাম. এবং তারপর একটি কমা নামের প্রথম থেকে শেষ নাম বিভাজন করা হয়. 183 00:14:59,470 --> 00:15:02,970 ডেভিড, Nate, রব, টমি, এবং Zamyla. 184 00:15:02,970 --> 00:15:06,850 আমি সবসময় Robby এবং টম মিশ্রিত করা হয়. 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 যাতে আমাদের সি প্রোগ্রাম এই একই কাঠামো অনুকরণমূলক কি আমরা সম্পন্ন করেছি 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 এটি append মোডে এটি খোলেন, এবং যে সব জন্য আমাদের করার বাকি এর হয় 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 কিভাবে সম্পর্কে আপনি, স্টেলা? আপনি কি জানেন যে বিন্যাসে string এর প্রথম অংশ বলে মনে হচ্ছে? 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 আমরা শুধু পরিবর্তকগুলি আছে, যা আমরা বিন্দু নোটেশন ব্যবহার করে একসেস 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 ব্যবহার করে ফাইল বর্ণনাকারী আপ. 254 00:21:22,500 --> 00:21:25,950 সুতরাং, বন্ধ ফাংশন যা আমরা ব্যবহার করবেন? Daniel? 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 >> [Charlotte]] কেন 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 কি fprintf GetString মত অনুভূতি কাজ যে শুধু এটি ব্যবহারকারী ইনপুট জন্য অপেক্ষা করব 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 আর অবশ্যই জিনিস,, যদি তাদের কোনো ছিল নাল পয়েন্টার বিরতি চাই, 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 যে প্রতি নির্দেশ করা নাল বা হতে পারে নাও হতে পারে. 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 আমরা সত্যিই জানি না, কিন্তু যদি এই পয়েন্টার কোনো নাল হয়, বা অবৈধ, 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 >> এর এই তামাশা বন্ধ করে দিন এবং আমরা pset 4 তাকান চলুন. 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 যা ছিল একটি শান্ত ছোট ধরনের, নতুন কিছু দেখায়, শীতল কমান্ড লাইন ঠাট যে আপনি ব্যবহার করতে পারেন. 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 দোষ ত্রুটি সম্পর্কে সবচেয়ে বিরক্তিকর জিনিস এক 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 এখানে আমি সময় gdb ./buggy1 টাইপ করছি. 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 এটা চিহ্ন পড়তে হবে, এটি "আমি আপনার এক্সিকিউটেবল ফাইল থেকে চিহ্ন করছি পড়া," বলবো 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 আমরা রান হয়, টাইপ করতে পারেন বা আমরা শুধু কিছু টাইপ করতে পারেন. 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 সুতরাং Saad, যদি আপনি কিছু টাইপ করুন এবং আঘাত, Enter কি? 388 00:32:30,980 --> 00:32:39,390 [Saad] আমি 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 যখন আমরা রান বা r টাইপ করুন এবং Enter আঘাত, এখনও আমরা একই 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 আমি BT লেখা, পূর্ণ backtrace শব্দ হিসাবে বিরোধিতা দ্বারা backtrace সংক্ষিপ্ত. 416 00:35:13,080 --> 00:35:16,510 কিন্তু কোরআন, কি যখন আপনি BT টাইপ করুন এবং Enter আঘাত? 417 00:35:16,510 --> 00:35:23,200 [Charlotte] এটা দেখায় দুই লাইন, লাইন 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 যেখানে আমরা প্রধান স্ট্যাকের ফ্রেমের উপরে স্ট্যাকের ফ্রেম ছিল swap, 424 00:35:54,890 --> 00:35:59,700 ভেরিয়েবল এবং আমরা যে যে প্রধান ভেরিয়েবলগুলি ব্যবহার ছিল শীর্ষে swap-র ব্যবহার ছিল. 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 এছাড়াও আপনি ঠ সঙ্গে এটি হ্রাস করা যাবে. 441 00:37:13,650 --> 00:37:18,910 তাই আপনি যদি আমরা ঠ আঘাত কি, এখানে আমরা পেতে পারি? 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 এই ভীতু ধরনের দেখায়, 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 আমরা সোর্স কোড যে pertains স্ট্যাকের ফ্রেম আমরা বর্তমানে করছি ইন খুঁজছেন 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 তাই দু: আপনি কি অদ্ভুত আচরণ করা হতে পারে এখানে কোনো চিন্তা নেই? 479 00:39:54,120 --> 00:39:59,400 [দু] আমি কেন এটা বিপর্যয় এর জানি না. >> আপনি কেন এটা বিপর্যয় এর জানেন না? 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 [স্টেলা] আমি নিশ্চিত না. নিশ্চিত >> নেই. Daniel? চিন্তা? ঠিক আছে. 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 অ্যারের শেষ নাল সঙ্গে সবসময় বাতিল করা হয়. 499 00:41:19,930 --> 00:41:26,050 তাই আসলে সঞ্চিত আছে নাল আছে. 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 এই কুশলী-সপ্রতিভ পি কমান্ড ব্যবহার করে. 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 অথবা যে pset 0 শেষে সামান্য কিভাবে হেক্স মধ্যে 50 প্রতিনিধিত্ব সম্পর্কে প্রশ্ন? 516 00:42:34,680 --> 00:42:39,410 আমাদের সি এস এ হেক্স সংখ্যা লিখুন, শুধু নিজেদেরকে গুলান না 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 এটা পরিনত হয় যে এই কি নাল হয়, আসলে মেমরি,. 526 00:43:22,630 --> 00:43:25,940 নাল শুধুমাত্র 0. 527 00:43:25,940 --> 00:43:37,010 এখানে, উপাদান argv এ সঞ্চিত [1] হল নাল. 528 00:43:37,010 --> 00:43:45,220 তাই আমরা একটি নাল পংক্তি আমাদের "CS50 স্কচ" স্ট্রিং তুলনা করার চেষ্টা করছেন. 529 00:43:45,220 --> 00:43:48,130 সুতরাং নাল dereferencing, যাও নাল এ জিনিষ অ্যাক্সেস করার চেষ্টা, 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 না কিনা অথবা আপনি একটি মান যে নাল সালে পাশ করেছি. 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 সত্যিই দ্রুত কিভাবে, আমরা ঠিক করব এই সমস্যা হতে পারে? Charlotte? 536 00:44:19,730 --> 00:44:23,540 [Charlotte] ব্যবহার করে আপনি যদি চেক করতে পারেন. 537 00:44:23,540 --> 00:44:32,240 তাই আপনি যদি argv [1] হল নাল, তারপর == 0, 1, বা ফিরে কিছু [অপাচ্য]. 538 00:44:32,240 --> 00:44:34,590 >> হ্যাঁ. যাতে এর একটি দুর্দান্ত উপায় না, আমরা পরীক্ষা করতে পারবেন, 539 00:44:34,590 --> 00:44:39,230 মান সম্পর্কে আমরা করছি strcmp হত্তয়া যাও, argv [1], এটি অকার্যকর হয়? 540 00:44:39,230 --> 00:44:45,830 যদি এর নাল তারপর, আমরা অনুমোদন বাতিল করা বলতে পারেন. 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 দুর্ভাগ্যবশত, এটা আমাদেরকে বলে যে, আমরা একটি ডি পেয়ে থাকেন 566 00:46:51,540 --> 00:46:54,090 >> আমরা ফিরে যান এবং কোড তাকান এবং সেখানে কি কি ঘটছে ছিল দেখতে পারেন 567 00:46:54,090 --> 00:46:57,980 যাও জিনিসটা কি ছিল - কেন এটা আমাদের বলার ছিল যে আমরা একটি ডি পেয়েছে 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 স্কচ টাইপ, সেটা ছাপে আউট "আপনি একটি এ পেতে" 586 00:48:13,980 --> 00:48:16,530 অন্যথা এটি ছাপে আউট "আপনি একটি ডি পেতে" 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 তাদের মতে "আপনি একটি ডি পেতে" 590 00:48:29,290 --> 00:48:32,560 আমি এটা কাজ পেতে কোট প্রয়োজন; কেন হল? 591 00:48:32,560 --> 00:48:38,490 >> হ্যাঁ. এটা পরিনত হয় যে যখন - এই একটি মজার সামান্য খোশগল্প - 592 00:48:38,490 --> 00:48:47,900 যখন আপনি প্রোগ্রাম চালানো, আমরা যদি এটা চালানো এবং আমরা CS50 স্কচ টাইপ, 593 00:48:47,900 --> 00:48:50,800 ঠিক মত Daniel সে কি বলছে, এবং ছিল আপনি Enter, 594 00:48:50,800 --> 00:48:52,870 এটি এখনও বলেছেন আমরা একটি ডি পেতে 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 সুতরাং এখন, যদি আমরা কোট মধ্যে এটি করা এবং এটি পুনরায় চালানোর জন্য, আমরা একটি এ পেতে 602 00:49:29,560 --> 00:49:38,780 তাই ঠিক সংক্ষিপ্তবৃত্তি যাও, কোন কোট, 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 আমি ফাংশন নামের উপর ব্রেকপয়েন্ট সেট কিনতে, কারণ - সহজ স্মরণ, 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 কারণ আপনি কিছু কোড যোগ করতে অথবা মুছে ফেলেন, তাহলে আপনার সমস্ত ব্রেকপয়েন্ট সম্পূর্ণই হয় মাতাল আপ. 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 আপনি হলে continue কমান্ড ব্যবহার করুন এবং প্রোগ্রাম চালানোর জন্য অবিরত শেষ করা যাবে. 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 আমি পরের কমান্ড, যা আমি n সঙ্গে সংক্ষিপ্ত ব্যবহার করতে পারেন. 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 আউট করে প্রস্থান করার, যা আপনি ব্যবহার করে প্রস্থান করার জন্য q ও বা কি ঠিক চলুন. 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-আছে আপনি আপনার Mac খুব এই কাজ করতে পারেন, যদি আপনি টার্মিনাল খুলুন. 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 অথবা যেখানে আমরা cat কমান্ডের দৌড়ে, আক্ষরিক এটা ছাপা আমাদের পর্দায় 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] এবং কিছু? 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 সঞ্চিত [i] এবং তারপর আমরা পড়তে মোডে এই ফাইলটি খুলতে যাচ্ছেন. 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 তাই দু: আমরা কিভাবে একটি ফাইল বন্ধ করবেন? 718 00:59:57,220 --> 01:00:01,020 [দু] 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 [জিমি] নং >> ঠিক আছে. না. Charlotte? আলেকজান্ডার? কোন অন্যদের? ঠিক আছে. 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 তারা সব চ সঙ্গে লাগা. কিছু একটি ফাইল না. 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 এই ফাংশন স্ট্যান্ডার্ড ইনপুট / আউটপুট লাইব্রেরি সব পাওয়া যায়. 741 01:02:14,880 --> 01:02:17,510 তাই আপনি যদি এই প্রোগ্রামের উপরে তাকান, 742 01:02:17,510 --> 01:02:24,110 আপনি যে ইতিমধ্যে আমরা স্ট্যান্ডার্ড ইনপুট / আউটপুট গ্রন্থাগারের জন্য হেডার ফাইলটি অন্তর্ভুক্ত করেছেন দেখতে পারেন. 743 01:02:24,110 --> 01:02:27,120 যদি আমরা চিন্তা করতে চান যা আমরা ব্যবহার করতে চান, 744 01:02:27,120 --> 01:02:29,690 আমরা সবসময় খোলা man পৃষ্ঠাগুলি আপ করতে পারেন. 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 এবং এ সংশ্লিষ্ট man পৃষ্ঠা দেখুন. 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 এবং এই ভাবে আমরা প্রকৃত সি মধ্যে তা করে 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 [দু উত্তর, অপাচ্য] >> হ্যাঁ. তাই দু এর সম্পূর্ণ অধিকার. 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 যদি আমরা আমাদের সংক্ষিপ্তসার মধ্যে স্ক্রোল এই man পৃষ্ঠা অল্প ডাউন, 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 [আলেকজান্ডার, অপাচ্য] 808 01:07:22,090 --> 01:07:30,050 >> ঠিক আছে, শুধু ইংরেজী সম্পর্কে আপনি কি চেষ্টা করছেন? [আলেকজান্ডার, অপাচ্য] 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 নতুন, এই ভীতু লুপ জন্য বাক্য গঠন, যেখানে পরিবর্তে শুধুমাত্র একটি মৌলিক পাল্টা ব্যবহার 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 সুতরাং আমরা এই দ্বারা করতে পারেন - আমি এই ch কল, এবং আমরা এটি আরম্ভ চলুন 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 এবং পরিবর্তনশীল ch মধ্যে এটি সঞ্চয়. 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 এবং তারপর পরিবর্তে ch করছেন + + ', যা শুধু মান বাড়াতে হবে, 829 01:09:48,750 --> 01:09:52,710 তাই আমরা যদি একটি ফাইলের একটি আউট, একটি একটি মূলধন, বলা, পড়া, 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 [ছাত্র] fgetfile? >> Fgetc, বা দুঃখিত, আপনি ছিল সম্পূর্ণ সঠিক. 836 01:10:17,200 --> 01:10:20,470 আমি এটি misspelled অধিকার আছে. হাঁ তাই. 837 01:10:20,470 --> 01:10:26,240 এখানে পরিবর্তে ch করছেন + + ', 838 01:10:26,240 --> 01:10:29,560 আমরা ঠিক করছি fgetc আবার (ফাইল) কল যাচ্ছে 839 01:10:29,560 --> 01:10:39,180 এবং আমাদের একই ch পরিবর্তনশীল ফলাফল সঞ্চয়. 840 01:10:39,180 --> 01:10:43,730 [ছাত্র প্রশ্ন, অপাচ্য] 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 তাই যখনই আপনি এই কল, আপনি একটি অক্ষর দ্বারা ফাইল পয়েন্টার করছি বৃদ্ধিশীল. 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 [ছাত্র প্রশ্ন, অপাচ্য] >> এবং that's - হাঁ. 849 01:11:32,030 --> 01:11:34,810 এটা ফণা এর অধীন এই জাদু ধরনের. 850 01:11:34,810 --> 01:11:37,930 আপনি শুধুমাত্র বৃদ্ধিশীল মাধ্যমে রাখা. 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 ঐগুলি স্ট্যান্ডার্ড ইনপুট / আউটপুট লাইব্রেরি সব. 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 >> এই হল নতুন, এখানে ভীতু তথ্য অনেক. 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]