[সঙ্গীত বাজাচ্ছি] ছিনিয়ে Boden: ঠিক আছে. ভিডিও প্রথম সুতরাং, প্রথম জিনিস, একটি পরিচিত মুখ থেকে. [ভিডিও প্লেব্যাক] -ঠিক আছে. এটি CS50, এবং এই হল সপ্তাহে তিন শুরু. আমি আপনার সাথে হতে পারে না দুঃখিত আজ, কিন্তু আমাকে পরিচয় করিয়ে মঞ্জুরি CS50 এর নিজস্ব রব Boden. [END টি ভিডিও প্লেব্যাক] [সাধুবাদ এবং চিয়ার্স] ছিনিয়ে Boden: এ চলচ্চিত্রের তালিকা যে ভিডিও কল্পনাপ্রসূত. ঠিক আছে. সুতরাং প্রথম, অন্য লাঞ্চ আছে. এটা 1:15 এ আগামীকালের. এই শুক্রবার কোন লাঞ্চ আছে. এটা Quora সঙ্গে হল. আর টমি এক কিন্তু, এখনো এখানে না সাবেক প্রধান CF আছে মানুষ, টমি জানায়, এসব মামলায়. তাই তিনি একটি মজার লোক. আপনি আসা উচিত. ঠিক আছে. সুতরাং গত সপ্তাহে, আমরা সরাইয়া ভঙ্গ শুরু একটি স্ট্রিং সত্যিই কি বিষয়ে. আমরা শুরু থেকে পরিচিত করেছি এটি অক্ষরের একটি ক্রম এর. কিন্তু গত সপ্তাহে, আমরা আসলে মধ্যে delved কি সত্যিই একটা ক্রম যে অক্ষর, ভাল, আমরা এখন আছে অক্ষরের অ্যারে. এবং আমরা একটি পংক্তি, এটি একটি অ্যারের যে জানি অক্ষরের খুব শেষে, আমরা এই বিশেষ নাল বাইট আছে, এই ব্যাকস্ল্যাশ 0, যে শেষ নির্দেশ স্ট্রিং. তাই একটি স্ট্রিং একটি অ্যারের হয় অক্ষর, কিন্তু আমরা থাকতে পারে বেশী অক্ষরের শুধু একটি অ্যারের, আমরা কোনো একটি অ্যারের থাকতে পারে আমরা চাই জিনিস ধরণ. সুতরাং, আপনি শেষ সপ্তাহ থেকে প্রত্যাহার করা হলে, ডেভিড চালু যে বয়সের প্রোগ্রাম সত্যিই দ্রুত. আমরা কি করতে যাচ্ছেন সুতরাং প্রথম জিনিস , একটি পূর্ণসংখ্যা জন্য ব্যবহারকারী জিজ্ঞাসা রুমে মানুষের সংখ্যা. আমরা যে পূর্ণসংখ্যা আছে, আমরা একটি অ্যারের ঘোষণা করছি. এই বন্ধনী সিনট্যাক্স লক্ষ্য করুন. আপনি যে ব্যবহার করতে যাচ্ছেন. সুতরাং আমরা পূর্ণসংখ্যার একটি অ্যারের ঘোষণা করছি বয়সের বলা হয়, এবং এন আছে এই অ্যারের মধ্যে পূর্ণসংখ্যা. ঠিক তাই এই প্যাটার্ন, এই 4 int- আমি প্লাস, আমি কম এন হল, 0 সমান প্লাস, যে একটি প্যাটার্ন হতে যাচ্ছে আপনি খুব ব্যবহার করতে পারেন যে. যে বেশ অনেক আপনি কিভাবে কারণ সবসময় অ্যারে পুনরুক্তি করা যাচ্ছে. তাই এন হয় মনে রাখা আমাদের অ্যারের দ্বারা. তাই এখানে, আমরা বার বার জিজ্ঞাসা করা হয় রুমে ব্যক্তি আমি বয়সের জন্য. এই পর, আমরা নিচে যান, এবং যাহা জন্য নির্বিচারে কারণ, আমরা তখন তারা চলুন কত পুরানো প্রিন্ট আউট এখন থেকে এক বছর হতে. এবং যে প্রোগ্রাম, এর যাক , বয়সের করতে স্ল্যাশ বয়সের বিন্দু. তাই রুমে মানুষের সংখ্যা, এর তিনটি আছে বলা যাক. এবং, প্রথম ব্যক্তি 13 হয় বলে, আগামী 26, এবং গত 30 হয়. আমি তখন এটি ঐ তিন উপর বারবার করব মানুষ,, 14 আউট 27, এবং 31 মুদ্রণ. তাই মনে রাখা যে আমরা একটি ঘোষণা যখন আকার n এর অ্যারে, যে এ সূচক অ্যারে, অ্যারের মান রয়েছে এবং সূচক 0, 1, 2, সব পথ আপ n যাও বিয়োগ 1. সুতরাং আমরা যখন বলেন তিন জনের ছিল রুমে, এবং আমরা এখানে স্থাপন করা এই মাধ্যমে প্রথম পুনরাবৃত্তির লুপ, আমি 0 হতে যাচ্ছে. সুতরাং সূচক 0 সালে. আমরা প্রথম বরাদ্দ করা হয় ব্যবহারকারী প্রবেশ এজ. তারপর পরের এক, আমরা প্রবেশ করছি দ্বিতীয় এন ব্যবহারকারী প্রবেশ করে, এবং এ দুই, গত এন পাশে. তাই লক্ষ্য করা যে আকারের একটি অ্যারে তিন কিছু নেই সূচী তিনটি. এই বৈধ নয়. ঠিক আছে. সুতরাং, এখানে ফিরে যাচ্ছে. তাই এখন আমরা অ্যারে মোকাবেলা করেছি যে, আমরা কিছু ঘনিষ্ঠতা আছে. এখন আমরা কমান্ড যান চলুন হতে যাচ্ছে যা লাইন আর্গুমেন্ট, এই সমস্যা সেটে বেশ প্রাসঙ্গিক. তাই এখন পর্যন্ত আপ, যখনই আপনি করেছি আপনার প্রধান ফাংশন ঘোষণা, আমরা করেছি int প্রধান অকার্যকর বলেন. তাই অকার্যকর শুধু মানে আমরা কোনো পাশ করার নেই এই ফাংশন আর্গুমেন্ট. এখন আমরা যে প্রধান দেখতে যাচ্ছেন কিছু আর্গুমেন্ট গ্রহণ করতে পারেন. এখানে আমরা argc int-তাদের কল এবং স্ট্রিং argv বন্ধনী. বন্ধনী, আবার, ইঙ্গিত আমরা অ্যারে সঙ্গে লেনদেন করছেন যে. তাই এখানে, স্ট্রিং argv বন্ধনী, আমরা করছি স্ট্রিং একটি অ্যারের সাথে আচরণ. সুতরাং argc, যা নির্দেশ করে যাচ্ছে আমরা করেছি কতগুলি আর্গুমেন্ট এই প্রোগ্রাম প্রেরণ. এবং, এর মানে হল যে তা দেখতে এর এই বন্ধ করা যাক. ঠিক আছে. তাই এখন পর্যন্ত আপ, আমরা প্রতি রান করেছি ডট স্ল্যাশ বয়সের মত প্রোগ্রাম. আমরা যা করতে পারেন এছাড়াও, কমান্ড লাইনে, অতীত আর্গুমেন্ট পাস, এইভাবে শব্দ, কমান্ড লাইন আর্গুমেন্ট. তাই প্রথম যুক্তি, হ্যালো দুনিয়া. তাই এখানে, argc তিনটি হবে. এটা আর্গুমেন্ট গণনা এর কমান্ড লাইনে. Argc, সবসময় অন্তত 1 থেকে বিন্দু , নিজেই বয়সের স্ল্যাশ, এক হিসাবে গণ্য কমান্ড লাইন আর্গুমেন্ট. তারপর হ্যালো প্রথম. ডট স্ল্যাশ বয়সের তারপর, zeroth যদি হ্যালো প্রথম, এবং দুনিয়া দ্বিতীয় কমান্ড লাইন আর্গুমেন্ট. তাই স্ট্রিং argv, আমরা দেখতে যাচ্ছেন, স্ট্রিং, বিন্দু স্ল্যাশ রয়েছে বয়সের, হ্যালো, এবং বিশ্বের. এবং, ডেভিড এর অনুরোধ করে, আমরা চলুন যে প্রবর্তনের একটি ভিডিও প্লে করতে. [ভিডিও প্লেব্যাক] আপ আমরা করেছি প্রোগ্রাম যা এখন পর্যন্ত লিখিত, আমরা ঘোষণা করেছি প্রধান হিসাবে int প্রধান অকার্যকর. এবং এই সব সময়, যে শূন্যতা আছে কেবল উল্লেখ করা হয়েছে যে প্রোগ্রাম কোনো লাগবে না কমান্ড লাইন আর্গুমেন্ট. একটি ব্যবহারকারী একটি রান যখন অন্য কথায়, ইন প্রোগ্রাম, সে কমান্ড প্রদান করতে পারেন অতিরিক্ত লিখে লাইন আর্গুমেন্ট শব্দ বা বাক্যাংশ পরে প্রোগ্রাম এর প্রম্পটে নাম দিন. হ্যাঁ, আপনি আপনার প্রোগ্রাম চাই আপনি যদি কমান্ড লাইন আর্গুমেন্ট, একটি বা নিতে আরো যেমন শব্দ, আমরা প্রতিস্থাপন করতে হবে আর্গুমেন্ট কয়েক সঙ্গে বাতিলযোগ্য. সুতরাং আসুন যে কাজের জন্য. Cs50.h. অন্তর্ভুক্ত করুন প্রমিত io.h. অন্তর্ভুক্ত করুন প্রধান আন্তর্জাতিক. এবং এখন, পরিবর্তে অকার্যকর, আমি যাচ্ছি একটি argc নামক int-, এবং একটি নির্দিষ্ট argv নামক স্ট্রিং অ্যারে. এখন, argc এবং argv হয় কেবল নিয়মাবলী. আমরা এই আর্গুমেন্ট বলা থাকতে পারে আমরা চাই অধিকাংশ কিছু. কিন্তু কি গুরুত্বপূর্ণ argc হয় কোন int সংজ্ঞা দ্বারা, এটা হয়, কারণ যুক্তি গণনা ধারণ করে যাচ্ছে, মোট শব্দের সংখ্যা যে ব্যবহারকারী তার বা তার প্রম্পটে টাইপ করা হয়েছে. argv এদিকে, যুক্তি ভেক্টর, হয় আসলে জমা করার একটি অ্যারে হতে যাচ্ছে ব্যবহারকারী যে সব শব্দের তার বা তার প্রম্পটে টাইপ করা. এর এখন কিছু করতে এগিয়ে আসুন এর মধ্যে এক বা একাধিক সঙ্গে কমান্ড লাইন আর্গুমেন্ট. বিশেষ করে, এর এগিয়ে এবং মুদ্রণ চলুন যাই হোক না কেন শব্দ ব্যবহারকারী ধরনের প্রোগ্রাম এর নাম পরে প্রম্পটে. ওপেন বন্ধনী. বন্ধ বন্ধনী. Printf শতাংশ গুলি ব্যাকস্ল্যাশ ও কমা. এবং এখন আমি printf, কি মূল্য বলা প্রয়োজন যে স্থানধারক মধ্যে চলা. আমি ব্যবহারকারী যে প্রথম শব্দ চাই প্রোগ্রাম এর নাম পরে টাইপ করা, এবং তাই আমি উল্লেখ করা যাচ্ছে না argv বন্ধনী 1, বন্ধ লঘুবন্ধনী, সেমিকোলন. এখন, কেন বন্ধনী 1 এবং না বন্ধনী 0? ভাল, এটি স্বয়ংক্রিয়ভাবে সংরক্ষণ করা, দেখা যাচ্ছে argv মধ্যে 0 হতে যাচ্ছে প্রোগ্রাম এর প্রকৃত নাম. সুতরাং প্রথম শব্দ যে ব্যবহারকারী ধরনের প্রোগ্রাম এর নাম দ্বারা, পরে কনভেনশন, হতে যাচ্ছে argv 1 সংরক্ষিত. এর এখন কম্পাইল করা যাক এবং এই প্রোগ্রাম চালানো. Argv 0, বিন্দু স্ল্যাশ argv 0 করুন. এবং এখন একটি শব্দ হ্যালো মত. লিখুন. এবং সেখানে আমরা হ্যালো, এটা আছে. [END টি ভিডিও প্লেব্যাক] ছিনিয়ে Boden: ঠিক আছে. যে বন্ধ করুন. সুতরাং যে প্রোগ্রাম কটাক্ষপাত গ্রহণ করে আমরা শুধু ভাল,, আমাদের কাছে শুধু চালু আমরা 0 argv প্রিন্ট এখন, যদি না,, প্রদর্শন এটা, argv 0, বিন্দু স্ল্যাশ argv 0 কি. প্রত্যাশা অনুযায়ী তাই,, এটা মুদ্রণ হচ্ছে argv 0 যেহেতু, প্রোগ্রামের নাম সবসময় হতে যাচ্ছে প্রোগ্রামের নাম. কিন্তু এর কিছু একটা করতে দেওয়া আরো আকর্ষণীয় বিট. সুতরাং সমস্যা সেট, আপনি হবেন এই ফাংশন, ATOI চালু. তাই আমরা জন্য ATOI ব্যবহার? যে রূপান্তর যাচ্ছে একটি একটি পূর্ণসংখ্যা যাও স্ট্রিং. তাই আমি স্ট্রিং পাস হলে, এক দুই তিন, ATOI করার জন্য, যে রূপান্তর করব পূর্ণসংখ্যা দিতে, এক দুই তিন. তাই আমরা প্রথম রূপান্তর চলুন একটি পূর্ণসংখ্যা করতে কমান্ড লাইন আর্গুমেন্ট, এবং তারপর ঠিক যে পূর্ণসংখ্যা মুদ্রণ. তাই মূলত, আমরা ধরনের করছি শুধু GetInt reimplementing পূর্ণসংখ্যা কমান্ড এ সন্নিবেশ করা লাইন পরিবর্তে প্রোগ্রামে ইন্টারেক্টিভ. আমি তখন, argv 0, যার ফলে এর না দেওয়া এখানে তা, এবং যে বন্ধ. সুতরাং argv 0 চলমান, এবং এর প্রবেশ করা যাক পূর্ণসংখ্যা, এক দুই তিন চার এক দুই. সুতরাং, এক পূর্ণসংখ্যা প্রিন্ট করব দুই তিন চার এক দুই. যে ATOI কিছু subtleties আছে এটা কিছু বিষয়ে চিন্তা করা বন্ধ করব একটি বৈধ সাংখ্যিক অক্ষর অতিক্রম, কিন্তু যে কোন ব্যাপার না. সুতরাং আপনি কি মনে করেন আমি এটা করতে পারি? সেগমেন্টেশন ফল্ট. সুতরাং এটা কেন হয়? আপনি আমাদের প্রোগ্রামে ফিরে, আমরা করছি argv 1, প্রথম যুক্তি রূপান্তর প্রোগ্রামের নামের পরে, একটি পূর্ণসংখ্যা করতে. কিন্তু গৃহীত কোন যুক্তি আছে প্রোগ্রামের নামের পরে. তাই এখানে, আমরা এই একটি বগী যে দেখুন প্রোগ্রাম, যেহেতু, আমরা এটি চালানোর চেষ্টা করুন কোনো আর্গুমেন্ট ছাড়া, এটি শুধু বিপর্যস্ত হবে. আপনি দেখতে পাবেন তাই আরেকটি সাধারণ প্যাটার্ন কিছু মত, argc কম হলে ছিল না যা নির্দেশ দুটি, আর অন্তত প্রোগ্রাম নাম এবং একটি প্রথম যুক্তি, তাহলে আমরা কিছু করতে দেব ভালো printf,, যথেষ্ট নয় কমান্ড লাইন আর্গুমেন্ট. যে সম্ভবত প্রিন্ট করতে ভালো না, এটা পছন্দ সম্ভবত কিছু আপনি একটি পূর্ণসংখ্যা লিখুন উচিত কমান্ড লাইনে. আমি ঠিক আছে এটা শেষ করব. এবং তারপর 1 ফিরে. সুতরাং আমাদের শেষে মনে রাখা প্রোগ্রাম, আমরা 0 ফিরে, যে ধরণের সাফল্য নির্দেশ করে. আর প্রধান স্বয়ংক্রিয়রূপে আপনি না হলে 0 প্রদান করে. তাই এখানে, আমরা ইঙ্গিত 1 retuning করছি যে সাফল্য না যে. এবং আপনি যাহা চান ফিরে আসতে পারেন, শুধু, 0 সাফল্য নির্দেশ করে, এবং অন্য কিছু ব্যর্থতা নির্দেশ করে. সুতরাং আসুন জিনিস এই সংস্করণে চালানো যাক. সুতরাং এখন, আমরা একটি কমান্ড লাইন লিখতে না থাকলে যুক্তি, এটা সঠিকভাবে বলতে পারবেন আমাদের যথেষ্ট কমান্ড লাইন না. বাক্য শেষ না. অন্যথায়, আমরা আসলে এটি এক পাস হলে, এটি প্রোগ্রাম সম্পন্ন করতে পারবেন. তাই এই আপনি argc ব্যবহার করেন কিভাবে সংখ্যার বৈধতা যাচাই করার জন্য কমান্ড লাইন আর্গুমেন্ট যে প্রকৃতপক্ষে গৃহীত হয়. সুতরাং আসুন কিছুটা এই প্রোগ্রাম করার সুযোগ জটিল, এবং দ্বিতীয় তাকান জিনিস পুনরাবৃত্তির. সুতরাং এখন, আমরা শুধু মুদ্রণ করছি না প্রথম কমান্ড লাইন আর্গুমেন্ট. এখানে, আমরা int আমি সমান থেকে iterating করছি 0, আমি, আমি argc কম প্লাস প্লাস, এবং মুদ্রণ argv, সূচক আমি. তাই এই প্যাটার্ন, আবার, এই একই পরিবর্তে ব্যতীত আগে হিসেবে প্যাটার্ন, পরিবর্তনশীল কলিং এন, আমরা argc ব্যবহার করছেন. তাই এই প্রতিটি সূচক উপর iterating হয় অ্যারের মধ্যে, এবং প্রতিটি মুদ্রণ যে অ্যারের মধ্যে উপাদান. এবং তাই, আমরা এই প্রোগ্রাম চালানো হলে, ভাল, আমি কোনো কমান্ড লাইন লিখতে হয়নি আর্গুমেন্ট, শুধু কপি করে প্রিন্ট এটা তাই প্রোগ্রামের নাম. আমি জিনিস এক গুচ্ছ লিখুন, এটা করব এক, তার নিজস্ব লাইন প্রতিটি মুদ্রণ. ঠিক আছে. সুতরাং আসুন আরও এই এক পদক্ষেপ গ্রহণ করা. এবং এর পরিবর্তে প্রতিটি যুক্তি মুদ্রণ তার নিজস্ব লাইন, একে মুদ্রণ যাক প্রতিটি যুক্তি চরিত্র তার নিজস্ব লাইন. সুতরাং argv হয় মনে রাখা স্ট্রিং একটি অ্যারে. তাই কি একটি স্ট্রিং, কিন্তু অক্ষরের একটি অ্যারের? সুতরাং যে argv সত্যিই মানে হল যে একটি অক্ষরের একটি অ্যারের অ্যারে. যাতে এর সুযোগ নিয়ে, এর জন্য এখন এই উপেক্ষা করা. এর মাত্র স্ট্রিং argv 0 বিবেচনা করা যাক. আমরা প্রতিটি চরিত্রের আনতে চান তাই আপনি যদি argv 0 নিজস্ব লাইনে, তাহলে আমি চাই আমরা ব্যবহার করতেন প্যাটার্ন যা করতে, আমি হয় অ্যারের দ্বারা কম, এখানে, এর strlen, যা যে আমি কাজ করতে চান না কি, স্ট্রিং গুলি argv 0 সমান. তাই আমি আমাদের দৈর্ঘ্য কম এই ক্ষেত্রে একটি অ্যারে যা অ্যারে, অক্ষরের, আমি প্লাস প্লাস. আমরা গত সপ্তাহে দেখেছি এবং তাই,, এটা আদর্শ আমরা বাইরে strlen যে সরানো হলে অবস্থার, যেহেতু এন যোগ করা হবে s এর strlen আমরা যেতে প্রতিটি সময় লুপের মাধ্যমে, এবং এটি পরিবর্তন করা যাচ্ছে না. তাই আমরা এখানে উপর এন সমান সেট করব. ঠিক আছে. সুতরাং এখন, আমরা উপর iterating করছি অ্যারের মধ্যে প্রতিটি সূচী. এবং তাই, আমরা প্রতিটি প্রিন্ট করতে চান তাহলে যে অ্যারের, শতাংশ সি চরিত্র আমরা ব্যবহার করতে চান পতাকা অক্ষরের জন্য. এবং এখন একটি বন্ধনী আমি হতে যাচ্ছে স্ট্রিং, সূচক চরিত্র আমি, তাই যদি স্ট্রিং হ্যালো ছিল. তারপর বন্ধনী, 0 ঘঃ হতে যাচ্ছে S S 1 তাই ই হতে পারে, এবং হবে. তাই এখন আমরা একত্রিত করতে চান এই দুটি জিনিস. আমরা প্রতিটি অক্ষর প্রিন্ট করতে চান প্রতিটি কমান্ড লাইন আর্গুমেন্ট মধ্যে. সুতরাং আমরা আছে চলুন একটি লুপ জন্য নেস্টেড. এবং সাধারনত, প্রথম কাউন্টার আমি পরের ঞ হতে যাচ্ছে, এন হয় হয় argv আমি এর strlen হবে, আমি কম এন, আমি প্লাস প্লাস. এবং এখন এর পরিবর্তে মুদ্রণ argv আমি, তাই আমি সূচী যাচ্ছে argv বন্ধনী - যে আমি তম কমান্ড লাইন হতে যাচ্ছে যুক্তি, argv আমি, ঞ যাচ্ছে জেটিএইচ চরিত্রের হতে I-তম যুক্তি. আমি এখন এখানে এই পর্যন্ত পরিত্রাণ পাবেন আমরা যে লুপ মধ্যে রাখা থেকে. তাই স্ট্রিং গুলি সমান সমতূল্য argv আমি, এবং তারপর গুলি বন্ধনী ঞ. ভাল, আমরা ঘোষণা করতে হবে না এই পরিবর্তনশীল গুলি. পরিবর্তে, আমরা শুধু এই একত্রিত করব আমরা ছিল কি দুটি,, ঞ ঝ argv. বক্তা 1: [শ্রবণাতীত]. ছিনিয়ে Boden: গুড কল. তাই এই নষ্ট হয়ে গেছে. আমি আসলে এটা দৌড়ে, আমরা would এই উপলব্ধি করেছেন. আমি যত্নশীল তাই কাউন্টার জন্য এই বিশেষ লুপ জে, iterator হয়. তাই আপনি যদি বিষয় পড়া হবে, সম্ভবত একটি অসীম লুপ, যদি আমরা যে নির্দিষ্ট ছিল না. আমরা কথা বলছি কেন আমার আজকের ডিবাগ. ঠিক আছে. তাই আসুন এই প্রোগ্রাম চালানো যাক. এবং এর আসলে একটি পৃথক printf যোগ করুন অধিকার এখানে শুধু প্রিন্ট করবে এই অর্থ থেকে অন্য লাইনে, যখন আমরা প্রোগ্রাম চালানো, একটি ফাঁকা আছে হবেন প্রতিটি চরিত্রের মধ্যে মধ্যে লাইন প্রতিটি কমান্ড লাইন আর্গুমেন্ট. ভাল, আমরা মানে যে কি দেখতে পাবেন. OOP. কিছু বাগ আছে. ত্রুটি পরোক্ষভাবে ঘোষণা লাইব্রেরি ফাংশন strlen. সুতরাং আমাদের প্রোগ্রামে ফিরে যাওয়া, আমি string.h অন্তর্ভুক্ত হ্যাশ ভুলে গেছি. সুতরাং string.h হতে যাচ্ছে ঘোষণা যে হেডার ফাইল ফাংশন strlen. ঠিক আছে, এটি প্রনয়ন. এখন, এর এটি চালানো যাক. সুতরাং শুধু যে. এটা আউট মুদ্রণ যাচ্ছে আমাদের প্রোগ্রামের নাম, হ্যালো দুনিয়া. এটা প্রতিটি, প্রতিটি জিনিস মুদ্রণ যাচ্ছে তার নিজস্ব লাইনে চরিত্র. ঠিক আছে. সুতরাং আসুন আসলে এই দেওয়া আরও এক ধাপ. এবং পরিবর্তে string.h ব্যবহার করে, এর যাক আমরা আমাদের নিজস্ব বাস্তবায়ন চাই কিভাবে আমার মনে strlen ফাংশন. তাই আমি সঙ্গে সঙ্গে দেব একটি ফাংশন স্বাক্ষর. সুতরাং আসুন my_strlen মধ্যে কল করা যাক, এবং এটি একটি আর্গুমেন্ট হিসাবে একটি স্ট্রিং নিতে যাচ্ছে, এবং আমরা ফিরে যাওয়ার আশা যে স্ট্রিং এর দৈর্ঘ্য. সুতরাং, যে যেখানে লোক? হ্যাঁ. ঠিক আছে. তাই আগে স্লাইড থেকে মনে রাখা যে গত সপ্তাহ থেকে এছাড়াও ছিল একটি অক্ষরের অ্যারে, ভাল, একটি পংক্তি, তাই আসুন এই আমাদের স্ট্রিং গুলি করে বলা যাক. তাই গুলি স্ট্রিং যদি, হ্যালো, তারপর, H-ই, L-, L-হে, মেমরি, যে যাচ্ছে তাহলে এই ব্যাকস্ল্যাশ হতে পারে, এবং 0 চরিত্র. তাই কিভাবে আমরা গুলি দৈর্ঘ্য পেতে পারি? ওয়েল, কৌতুক এই জন্য খুঁজছেন হয় 0 চরিত্র, এই নাল নেতিবাচক প্রতিক্রিয়া টারমিনেটর. তাই আলগোরিদিম যাচ্ছে কয়েক ভালো কিছু হতে যথেষ্ট অক্ষর যে - এর এই হাতে কিছু প্রতিনিধিত্বকারী আছে যাক কাউন্টার, এর এই int-দ্বারা কল করা যাক. সুতরাং, এখানে উপর থেকে শুরু, আমরা করছি আমাদের স্ট্রিং উপর বারবার যাচ্ছে. সুতরাং, এটা এইচ প্রথম অক্ষর আছে, এবং এটি ফিরে, তাই 0 স্ল্যাশ না দৈর্ঘ্য 1. পরবর্তী চরিত্রের বারবার, ই, এবং এটি 0 ব্যাকস্ল্যাশ না. দৈর্ঘ্য 2. এল, 3. এল, 4. হে, 5. এবং পরিশেষে, আমরা ব্যাকস্ল্যাশ পৌঁছানোর 0, এবং তাই তার মানে, ভাল, এই পংক্তি শেষ হয়. সুতরাং আসুন 5 ফিরে যাক. তাই আসলে, প্রথম, যে রূপায়ণকারী আমার এন দৈর্ঘ্য আমার ডান হাত, 0 সমান. এবং আমরা বারবার চলুন - বক্তা 1: [শ্রবণাতীত] ছিনিয়ে Boden: ওহ, অঙ্কুর. গুড কল. পরিস্ফুটন. তাই এন দৈর্ঘ্য 0 সমান. সুতরাং এখন, যখন গুলি দৈর্ঘ্য না তারপর সমান এবং, ব্যাকস্ল্যাশ 0. সুতরাং, এই ব্যাকস্ল্যাশ 0 স্মরণ, এটি একটি হল প্রকৃত চরিত্র, এবং এটি নির্দেশ করে স্ট্রিং এর শেষে. শুধু ভালো, এছাড়াও, ব্যাকস্ল্যাশ N অন্তর্গত একটি প্রকৃত চরিত্র. ব্যাকস্ল্যাশ 0 ইঙ্গিত যাচ্ছে আমাদের স্ট্রিং এর শেষে. আমি সেখানে যে রাখতে চান না. এবং দৈর্ঘ্য সূচীবদ্ধ গুলি নয়, যখন নাল টারমিনেটর সমান তারপর, আমরা শুধু দৈর্ঘ্য বাড়ায় চলুন. আমি তখন, আমাদের প্রোগ্রাম শেষে, দৈর্ঘ্য ঘটনাক্রমে যাচ্ছে এই ক্ষেত্রে 5 হতে. এবং আমরা শুধু দৈর্ঘ্য ফিরে আসবেন. ঠিক আছে. তাই এখন এখানে নিচে, আমি না my_strlen না. এর নিশ্চিত এটা কম্পাইল করা যাক সবকিছু সহজে চালানো হয়. আমি 2 মধ্যে করছেন? বা 1 যে ছিল? এটা করা উচিৎ. ঠিক আছে. তাই এই argv 2. প্রত্যাশিত হিসাবে, কাজ করে, যদিও এক আমি এটা করেছিল যে ছিল? হ্যাঁ. ঠিক আছে. জিনিস এই সংস্করণ আছে কি না printf, নতুন পর লাইন, কিন্তু এটি কোনো পার্থক্য করা হয় না. ঠিক আছে. প্রত্যাশা অনুযায়ী এ কাজ করেন. এখন আমরা এই এক ধাপ একত্রিত করতে পারেন উপরন্তু, এখানে যেখানে নোটিশ, ভাল, প্রথমত, আমরা argv এর strlen দখল করছি আমি, এবং তারপর আমরা উপর iterating করছি যে স্ট্রিং প্রতিটি অক্ষর. সুতরাং পরিবর্তে যে করছেন, তা যদি আমরা শুধু অপেক্ষা এই যুক্তি একত্রিত আমরা ব্যাকস্ল্যাশ 0 ডান আঘাত না হওয়া পর্যন্ত লুপ জন্য এই মধ্যে? Argv আমি, ঞ আছে যখন সুতরাং পুনরুক্তি সমান নয় ব্যাকস্ল্যাশ 0. সুতরাং এর প্রথম এটি চালানো যাক. ঠিক আছে. তাই এখানে, এই অবস্থা বলছে না - এর যে পরিষ্কার করা যাক. তাই এখন, এই আমাদের argv হস্তক্ষেপ না করা. তাই আমি ঠিক আগে যে প্রোগ্রাম দৌড়ে যখন, argv স্ট্রিং একটি অ্যারে. এবং তাই, আমি বিন্দু স্ল্যাশ argv দিয়ে এটি চালানো হলে 2, ওহে দুনিয়া, তারপর argv নিজেই argv জন্য, দৈর্ঘ্য 3 শূন্য, হ্যালো, এবং বিশ্বের. এবং এই সূচকের প্রতিটি ভেতরে, হয় নিজেই এই হবেন যেখানে একটি অ্যারের, বিন্দু, এই স্ল্যাশ হবে, আমি জানি না যে সঠিক পথে ছিল, আমি এটি ছিল না মনে হয়. একটি r-ভী ড্যাশ, আরো জায়গা দরকার. এর এই অ্যারে করে কাটা যাক. একটি r-ভী ড্যাশ 0, এবং তারপর ব্যাকস্ল্যাশ 0. এবং তারপর ছত্রভঙ্গ হ্যালো হতে হবে. এর, এইচ-ই ব্যাকস্ল্যাশ 0 বলে. এবং পরিশেষে, ওয়াট-হে ব্যাকস্ল্যাশ 0. তাই আমরা ঠিক লিখেছে যে অ্যালগরিদম, তারা কি loops জন্য নেস্টেড হয় করছেন, আমরা প্রথমে আছে আমি এবং তারপর ঞ মোকাবেলায়. এই প্রথম কোড সঙ্গে সহজ হবে পর্দা, এর পিছনে এই যান. ঠিক আছে. তাই আমি যে iterator যে বিজ্ঞপ্তি প্রতিটি কমান্ডের উপর iterating লাইন আর্গুমেন্ট. আর জে iterator iterating হয় যে প্রতিটি চরিত্রের উপর কমান্ড লাইন আর্গুমেন্ট. তাই এই অন্তরতম printf, কি করছে , আমরা argv 0 0 printf, printf আছে হয় argv 0 1 printf, argv 0 2 0 3 0 4 0 5, 0 6, কিন্তু এখন, argv 0 7 যাচ্ছে সমান ব্যাকস্ল্যাশ 0. তখন আমরা লুপ জন্য যে প্রস্থান, এবং এখন আমি 1 থেকে iterates. এবং এখন আমরা মুদ্রণ চলুন argv 1 0, argv 1 1 - ওয়েল, এখন, আমি ছোট হ্যালো কাটা থেকে, argv 1 2 আবার হতে যাচ্ছে ব্যাকস্ল্যাশ 0. এবং তাই, আমি বাড়ায় এবং অবিরত, এবং তাই, যতক্ষণ না আমরা সব প্রিন্ট আউট বিশ্ব, এবং যারা তিনটি কমান্ড লাইন হয় আর্গুমেন্ট, এবং আমরা বাইরে থেকে প্রস্থান করব দূরতম লুপ, এবং আমাদের প্রোগ্রাম শেষ. ঠিক আছে. সুতরাং আসুন এখানে ফিরে আসা যাক. তাই আপনার সাথে কিছু ঘনিষ্ঠতা লাভ করব এই কমান্ড লাইন আর্গুমেন্ট বিশেষ সমস্যা সেট. এখন, ডিবাগিং. তাই সম্ভবত আপনি ইতিমধ্যে কি আছে আপনার আগের কিছু ডিবাগ সমস্যা সেট. এবং ডিবাগিং এক খুব সহজ উপায়, প্রথম, এর একটি বগী প্রোগ্রাম তাকান. ওয়েল, এই প্রোগ্রামের মাধ্যমে হাঁটা আমরা একটি জন্য ব্যবহারকারীকে জিজ্ঞাসা করতে যাচ্ছেন পূর্ণসংখ্যা, যে পূর্ণসংখ্যা দখল, এবং তারপর, ইচ্ছামত, আমরা যখন একটি লুপ আছে শুধু হ্রাস করতে যাচ্ছে এটি 10 ​​সমান আছে আমি যতক্ষণ. যাক এর মাত্র আমি লিখে করছি অনুমান 10 এর চেয়ে বড় একটি পূর্ণসংখ্যা. এটি 10 ​​এর সমান না হওয়া পর্যন্ত তাই আমি হ্রাস. এবং তারপর আমরা অন্য লুপ আছে তোমার 0 সমান না, আমরা করছি, যে 3 দ্বারা আমি হ্রাস করতে যাচ্ছে. তাই আপনি যদি বাগ অভিপ্রায় দেখতে হলে এখানে, এই আমি করতে হ্রাস করব না 10, এবং তারপর এই লুপ ইচ্ছা করা 1 থেকে 4 7 10,,, থেকে হ্রাস আমি, নেতিবাচক 2, যাও, তাই 5 নেতিবাচক, এবং করতে নেতিবাচক অনন্ত, আমি আছি সাল আসলে 0 সমান না. এবং তারপর এই প্রোগ্রাম শেষে, আমরা যা foo বিন্যাস ফাংশন আছে মুদ্রণ হচ্ছে আউট আমি যে. তাই এই, একটি ছোট এবং তুচ্ছ প্রোগ্রাম এবং বাগ সুস্পষ্ট, বিশেষত পরে আমি বাগ ছিল কি বলেন. কিন্তু এখানে একনিষ্ঠ ভাল, এই পারে, হয় আসলে কিছু অনুরূপ আপনার শেষ থেকে অর্থগৃধ্নু থেকে সমাধান সমস্যা সেট, এবং হয়ত আপনি আছে আপনার প্রোগ্রামে কিছু অসীম লুপ, এবং আপনি কোন ধারণা আছে কি এটা যার ফলে এর. সুতরাং খুব দরকারী ডিবাগিং কৌশল শুধু printfs যোগ হয় সব আপনার কোড উপর. তাই এখানে আমি বাইরে একটি printf চান প্রথম যখন লুপ. এবং এখানে আমি একটি printf চান, এবং আমি ঠিক আমি মুদ্রণ করব. লুপ যখন আমি এমনকি আমি প্রথম চেষ্টা করবো. বাইরে, দ্বিতীয় লুপ যখন. আবার, ভিতরে প্রিন্ট এর এখানে, মূল্য আমি. আর এর এই চালানো যাক. সুতরাং ডট স্ল্যাশ ডিবাগ. একটি পূর্ণসংখ্যা লিখুন. এর 13 করুক না. আর গম্ভীর গর্জন. আমরা আমরা অসীম looping যে দেখুন দ্বিতীয় সময় লুপ এর ভিতর. তাই এখন আমরা বাগ কি জানেন. কিন্তু printf, ডিবাগিং, পুরোপুরি মহান কিন্তু আপনার প্রোগ্রাম একবার আর এবং আরো জটিল আছে, আরো পরিশীলিত সমাধান জিনিস কাজ পেয়ে. তাই আসুন এই সব printfs সরিয়ে দেওয়া. আর এর নিশ্চিত আমি না করার সুযোগ কিছু বিরতি. ঠিক আছে. সুতরাং আমরা চলুন প্রোগ্রাম পরিচয় করিয়ে দিতে বলা হয় গনুহ ডিবাগার জন্য GDB,. ভাল, আসলে, এর জন্য ডিবাগ সরিয়ে দেওয়া একটি দ্বিতীয়, এবং আবার ডিবাগ করা. ওয়েল, আসলে প্রথম, একটি ভাল পাঠ কমান্ড লাইন আর্গুমেন্ট মধ্যে. এই ঝনঝন কমান্ড যে যে লক্ষ্য করুন সবকিছু অতিক্রান্ত হচ্ছে কম্পাইল কমান্ড লাইনে, এই কমান্ড লাইন আর্গুমেন্ট. আপনি ব্যবহার করা যাচ্ছে তাই ঠিক কিভাবে কমান্ড লাইন আর্গুমেন্ট হিসাবে আমরা আগে কি, এবং আপনি pset মধ্যে আছি হিসাবে 2, যে ঝনঝন তাদের ব্যবহার করা হয় কিভাবে. তাই লক্ষ্য করা যে এই প্রথম পতাকা, ড্যাশ ggdb3, যে বলছে কি, ঝনঝন, আপনার সাথে এই ফাইলটি কম্পাইল হবে অভিপ্রায় যে আমরা শেষ পর্যন্ত করবে না এটি ডিবাগ করতে হবে. সুতরাং যতদিন না পর্যন্ত আপনি যে পতাকা আছে, তারপর আমরা GDB ডিবাগ করতে পারেন. এবং এটা গনুহ ডিবাগার খুলুন করব. সুতরাং কমান্ড অনেক আছে আপনি ব্যবহার করতে পারেন প্রয়োজন. প্রথম এক যে আপনি সম্ভবত করব অবিলম্বে প্রয়োজন চালান হয়. তাই কি করতে যাচ্ছে চালান করা হয়? এটা আমাদের প্রোগ্রাম শুরু করতে যাচ্ছে. সুতরাং, শুরু প্রোগ্রাম, প্রোগ্রাম চালানো একটি পূর্ণসংখ্যা, 13 জন্য আমাদের অনুরোধ করে. এবং তারপর এটা অসীম looping হিসেবে এর আমি সরানো ছাড়া প্রত্যাশিত printfs, তাই আমরা এমনকি যে কি না. সাধারণত প্রস্থান. ওহ. এটা আবৃত সম্ভব যে সব পথ কাছাকাছি, ফিরে যাও - যে উপেক্ষা. এটি সাধারণত প্রস্থান করা হয়নি অনুমান. যে একটি জটিল উত্তর আছে. সুতরাং এখন, যে খুব দরকারী না. তাই শুধু ভেতরে আমাদের প্রোগ্রাম এই ডিবাগার কোনো আমাদের সাহায্য না আমরা শুধু কাজ করতে পারে, যেহেতু পথ, ডট GDB বাইরে থেকে ডিবাগ কাট. তাই মাত্র একটি কমান্ড যে আপনি সম্ভবত করব - এবং আমি এই ত্যাগ করব. কন্ট্রোল-D অথবা, কাজ উভয় প্রস্থান. সুতরাং আসুন আবার খুলুন. আরেকটি কমান্ড যে আপনি সম্ভবত করব অবিলম্বে চাই থেকে পাওয়ার ব্রেক হয়. সুতরাং আমরা এখন জন্য প্রধান নেভিগেশন বিরতি পাবেন এবং তারপর আমি যে ব্যাখ্যা করছি. ভাল, এখানে আমরা আমরা একটি ব্রেকপয়েন্ট সেট দেখুন debug.c এই লাইনে. তাই বিরতির মানে হল যে যখন আমি রান টাইপ, প্রোগ্রাম যাচ্ছে যতক্ষণ চলমান অবিরত আমি একটা ব্রেকপয়েন্ট আঘাত. আমি রান আঘাত যখন সুতরাং, প্রোগ্রাম, শুরু হয় এবং তারপর এটি যত তাড়াতাড়ি এটা হিসাবে বিরতি প্রধান ফাংশন প্রবেশ করে. প্রধান আলাদা কিছু হতে যাচ্ছে আপনি বেশ সাধারণভাবে করবেন. এবং এখন, আপনাকে পরিচয় করিয়ে আরো কিছু কমান্ড. এটা আমরা বলার অপেক্ষা রাখে না যে, এখানে লক্ষ্য করুন যা লাইন 11, এ বিচ্ছেদ printf, একটি পূর্ণসংখ্যা লিখুন. সুতরাং কমান্ড পরবর্তী কিভাবে হতে যাচ্ছে আমরা কোড পরের লাইন এ যান. এই আমাদের পইঠা অনুমতি যাচ্ছে রেখা দ্বারা আমাদের প্রোগ্রাম লাইন মাধ্যমে. তাই পরবর্তী. এখন লাইন 12, আমরা চলুন পূর্ণসংখ্যা পেতে. পরবর্তী. আপনি শুধু Enter আবার, এটা করব আপনি কি শেষ জিনিস পুনরায়. তাই আমি টাইপ করতে হবে না পরবর্তী প্রতিটি সময়. সুতরাং একটি পূর্ণসংখ্যা, 13 লিখুন. তাই এখন, লাইন 14, আমি বেশী সময় 10 তুলনায়, এবং আমি পরবর্তী চেষ্টা করবো. এবং আমরা আমরা তোমার হ্রাস চলুন দেখুন. তাই আমরা আবার আমি হ্রাস চলুন. তাই এখন, অন্য দরকারী কমান্ড প্রিন্ট হয়. তাই প্রিন্ট করুন প্রিন্ট আউট করতে যাচ্ছে ভেরিয়েবলের মান. এর মান বের করে আনা যাক পরিবর্তনশীল আমি এর. এর আমি প্রিন্ট যাক. এটা আমি 11 বলে যাচ্ছে. এখন আমরা পরবর্তী আবার যখন আমি 10 তার চেয়ে অনেক বেশী. তাই আমি এখনও তার চেয়ে অনেক বেশী আছে এটি 11 থেকে 10,. আমি বিয়োগ বিয়োগ. এর আবার আমি প্রিন্ট যাক. হিসাবে প্রত্যাশিত, এটা 10 এর. সুতরাং এখন, পরের. এটা ফিরে অবস্থায় যাচ্ছে, আমি হয় 10 তার চেয়ে অনেক বেশী, কিন্তু আমি তাই, এখন 10 হল এটি 10 ​​থেকে বড় নয়, তাই আমরা আশা এটি যখন লুপ থেকে বেরিয়ে পড়ে. এবং এখন আমরা কোড যে লাইন নীচের করছি. এবং আরেকটি কমান্ড, তালিকা, শুধু যাচ্ছে পূর্ববর্তী এবং পরবর্তী প্রদর্শন কোড এর লাইন, এ দম্পতি ক্ষেত্রে আপনি নিজেকে হারিয়ে. তাই আমরা ঠিক এই সময় লুপ প্রস্থান এবং এখন আমরা এই প্রবেশ যখন লুপ, লাইন 18. তোমার 0 সমান না, যখন তখন. এবং, এর পরে, আমি মনে করি আমরা করব আমি বিয়োগ 3 সমান, এবং লক্ষ্য, এই মাত্র যাচ্ছি যাব. এবং আমরা আমি প্রিন্ট করতে পারেন. প্রত্যেকটি কমান্ড ধরণের শর্টকাট আছে. সুতরাং p মুদ্রন জন্য ছোট. সুতরাং আমরা P আমি যা করতে পারেন. শুধু এন অধিষ্ঠিত রাখা, বা পরবর্তী করছেন রাখা. আবার আমি মুদ্রণ করুন. আপনি এটা 167 নেতিবাচক এর এখন দেখুন. তাই এই চিরতরে নেভিগেশন যেতে, কিন্তু করবে না সত্যিই চিরতরে, আপনি শুধু দেখেছি, যেহেতু এটি আসলে কিছু সময়ে শেষ হবে. সুতরাং যে GDB শুরুতে. কিন্তু এর GDB-র মধ্যে আরও একটি জিনিস করতে দেওয়া. Uh, ডিবাগ. সুতরাং, এই বিশেষ ক্ষেত্রে, অসীম লুপ ভিতর হতে ঘটেছে প্রধান ফাংশন. এবং এখন জন্য, শুধু আমি নই, যে যে গ্রহণ মধ্যে অসীম লুপ সরানো যাচ্ছে foo বিন্যাস ফাংশন. শুধু এই শেষে, মনে রাখা প্রোগ্রাম, ভাল, এই পুরুষ গণনা ছিল শুধু যা ছিল foo বিন্যাস, কলিং আমি মুদ্রণ যাচ্ছে. কিন্তু এখন আমরা যা, foo বিন্যাস আহ্বান করছি এটা 0 পর্যন্ত আমি হ্রাস, এবং যাচ্ছে তারপর যে পরিবর্তনশীল মুদ্রণ. ঠিক আছে. যে সংরক্ষণ করুন. ডিবাগ করুন. এবং এখন, GDB ডিবাগ. ঠিক আছে. আমি শুধু একসাথে ব্যবহার আমি তখন আমি যাচ্ছি না আসলে মাধ্যমে পইঠা করতে পারবেন আমার প্রোগ্রাম লাইন বাই লাইন. সুতরাং এর প্রধান এ বিরতি দেওয়া, এবং তারপর রান টাইপ করুন. তাই এই মধ্য দিয়ে যেতে printf,, লিখুন একটি পূর্ণসংখ্যা, পূর্ণসংখ্যা, 13 পেতে. সুতরাং আমরা decrementing রাখতে যাচ্ছেন আমি 10 তার চেয়ে অনেক বেশী হওয়া পর্যন্ত. তারপর আমরা হয়ে যাওয়া চলুন যখন লুপ, এবং লাইন পেতে - এর একটি পৃথক উইন্ডোর মধ্যে এটি খুলুন. আমি আর ছিল না হওয়া পর্যন্ত তাই আমরা decremented তারপর 10 থেকে বড়, এবং আমরা foo বিন্যাস, ফাংশন বলা হয়. তাই যত তাড়াতাড়ি আমি আঘাত হিসাবে ঘটেছে ফাংশন foo বিন্যাস, ভাল, আমি foo বিন্যাস বলা হয়, এবং তারপর আমি আর GDB উপর নিয়ন্ত্রণ ছিল. তাই যত তাড়াতাড়ি আমি এই লাইনে এর পরে আঘাত হিসাবে, এই ঘটেছে যতক্ষণ জিনিস অব্যাহত, যখন যেখানে প্রোগ্রাম থেকে প্রস্থান - এটা ঘটনাক্রমে অস্তিত্ব ছিলো না নিই. আপনি এটি যদিও একটি বিট জন্য বিরতি দেখেছি. সুতরাং কেন আমি উপর নিয়ন্ত্রণ হারিয়ে ফেলেন নি যে সময়ে প্রোগ্রাম? আমি পরের টাইপ করুন যখন ভাল,, যে যায় কোড আক্ষরিক পরের লাইনে যে চালানো হবে. তাই পরে লাইনে 21, কোড এর পরের লাইন যে, লাইন 22 হয় চালানো হবে প্রধান থেকে প্রস্থান, যা. তাই আমি শুধু যেতে চাই না কোড এর পরের লাইন. আমি ফাংশন, foo বিন্যাস মধ্যে যেতে চান, এবং তারপর এছাড়াও মাধ্যমে পইঠা কোড যারা লাইন. সুতরাং যে জন্য, আমরা একটি বিকল্প আছে. এর আবার যে ত্যাগ করুন. প্রধান বিরতি. Uh, 1, পরের, পরের, 13, এর পরে, এর পরে, এর পরে, সাবধানে, আমরা লাইনে foo বিন্যাস আঘাত করার আগে. ঠিক আছে. সুতরাং এখন, আমরা লাইন 21 করেন আমরা foo বিন্যাস কল যেখানে. আমরা পরের টাইপ করতে না চান যে, যেহেতু শুধু ফাংশন foo বিন্যাস কল, এবং হবে কোড এর পরের লাইনে যান. আমরা কি ব্যবহার করতে চান পদক্ষেপ. সুতরাং ধাপ মধ্যে একটি পার্থক্য আছে এবং ধাপ মধ্যে আলোচনা যেখানে পরে, কাজ, এবং এর পরে যায় ফাংশন উপর. এটা ঠিক সম্পূর্ণতা executes ফাংশন এবং রাখে যাচ্ছে. সুতরাং ধাপ আমাদের আনতে যাচ্ছে ফাংশন মধ্যে, foo বিন্যাস. এবং আমরা এখন, আমরা এ ফিরে এসেছি, এখানে দেখুন তত্ত্ব, যে এই সময় লুপ, চিরকালের চালিয়ে যাচ্ছে. এবং যদি আপনি এটি আরও না থাকলে ধাপ, আঘাত কল করার একটি ফাংশন, তারপর এটা পরবর্তী অভিন্ন. আপনি একটি লাইন এ যখন এটা শুধুমাত্র যে ধাপ যে একটি ফাংশন আহ্বান করা হয় এর পরে থেকে পৃথক করতে যাচ্ছে. সুতরাং ধাপ এখানে আমাদের আনতে হবে. ধাপ, ধাপ, ধাপ, ধাপ, ধাপ, পদক্ষেপ, এবং আমরা চিরকাল শুধু অসীম লুপ করব. সুতরাং আপনি যে ব্যবহার করতে পারে আপনার অসীম loops চিহ্নিতকরণের পথে, হয় শুধু এই Enter কি করতে অধিষ্ঠিত আপনি আটকে যান যেখানে দেখতে. এখন পর্যন্ত যে কি ভাল উপায় কিন্তু এখন জন্য, যে পুরোপুরি যথেষ্ট. আর Stylistically, স্টাইল সাথে সামঞ্জস্য থেকে 50, আমি এই কাজ করা উচিত. ঠিক আছে. তাই এক শেষ কমান্ড পরিচয় করিয়ে দিতে. ভাল, এর ইন ডিবাগ gdb যাক সুতরাং পরিবর্তে প্রধান এ ভঙ্গ, যদি আমি foo বিন্যাস ফাংশন জানতে হয় সমস্যা নেই, তাহলে আমি থাকতে পারে শুধু পরিবর্তে, foo বিন্যাস এ বিরতি বলেন. এর আমি এ বিরতি বলে প্রধান এবং foo বিন্যাস উভয়. তাই আপনি অনেক ব্রেকপয়েন্ট সেট করতে পারেন হিসাবে আপনি চান. আমি রান টাইপ করুন, এটা যাচ্ছে এ থামাতে - বিস্ময়, যেহেতু, এর পুনরায় কম্পাইল করা যাক আমি জিনিষ পরিবর্তন. আপনি এই লাইন, সতর্কবাণী, উত্স দেখতে পাবেন ফাইল এক্সিকিউটেবল বেশী সাম্প্রতিক হয়. সুতরাং যে আমি এখানে গিয়েছিলাম যে মানে এবং স্টাইল সাথে সামঞ্জস্য থেকে এইসব পরিবর্তন 50 কিন্তু আমি পুনরায় কম্পাইল করা হয়নি প্রোগ্রাম. তাই GDB যে আমার সচেতন করে তোলে. আমি আবার ডিবাগ করা, প্রস্থান করব GDB ডিবাগ আঘাত. ঠিক আছে. তাই এখন, ফিরে আমি কি করছেন যাও. প্রধান, বিরতির foo বিন্যাস আলাদা. এখন আমি প্রোগ্রাম চালানো, তাই এটি যদি হিট না হওয়া পর্যন্ত চালিয়ে যাচ্ছে একটি ব্রেকপয়েন্ট. যে ব্রেকপয়েন্ট ঘটবে প্রধান প্রথম এক হতে. এখন, পরিবর্তে পরের করছেন, পরের, পরের, এর পরে, এর পরে, আমি foo বিন্যাস আঘাত না হওয়া পর্যন্ত, আমি চলতে থাকবে, যা অবিরত টাইপ করতে পারেন আপনি পরবর্তী ব্রেকপয়েন্ট আঘাত না হওয়া পর্যন্ত. আমি প্রথম পূর্ণসংখ্যা লিখুন আছে. আমি আঘাত না হওয়া পর্যন্ত চলতে থাকবে চালিয়ে যে যা পরবর্তী ব্রেকপয়েন্ট, foo বিন্যাস ফাংশন. আপনি যদি একটি আঘাত না হওয়া পর্যন্ত তাই রান চালানো হবে যখন ব্রেকপয়েন্ট, কিন্তু আপনি শুধুমাত্র রান টাইপ আপনি তারপর, প্রোগ্রাম আরম্ভ, এবং করছি তারপর থেকে, তা অব্যাহত আছে. আমি শুধু প্রধান ভঙ্গ করেছেন এবং যদি তারপর দৌড়ে, তা ভঙ্গ করব তারপর প্রধান, এবং অবিরত. আমি foo বিন্যাস এ একটি বিরতি বিন্দু আছে, না যেহেতু পূর্ণসংখ্যা লিখুন তারপর, এখন আমি আছি foo বিন্যাস এ বিরতি যাচ্ছে না. এটি শুধু অসীম যাও যাচ্ছে যে যতক্ষণ লুপ. ঠিক আছে. সুতরাং যে GDB যাও ইন্ট্রো এর. আপনি এটা ব্যবহার শুরু করা উচিত আপনার সমস্যা কেতা. এটা খুব সহায়ক হতে পারে বাগ চিহ্নিত করতে. আসলে আপনি ঠিক, লাইন বাই লাইন, যান আপনার কোড মাধ্যমে, এবং কি তুলনা আসলে আপনি আশা কি ঘটছে ঘটতে তাহলে, এটি প্রশংসনীয় এর আপনার বাগ মিস করা কঠিন. ঠিক আছে. সুতরাং গত সপ্তাহে ডেভিড এই প্রতিপালিত জন্য গোপন কী ক্রিপ্টোগ্রাফি স্টাফ আমরা চাই না যেখানে প্রথম সময়, পাসওয়ার্ড ঠিক সংরক্ষণ করা আমাদের কিছু প্লেইন টেক্সট ফাইলে কম্পিউটার, যেখানে কেউ উপর এবং মাত্র আসতে পারে এটি খুলুন এবং তাদের পড়া. মূলত, তারা এনক্রিপ্ট করা হবে কিছু উপায়. এবং সমস্যা সেট 2, আপনি ডিল করা হবে এনক্রিপশন এক পদ্ধতি, অথবা, ভাল, দুটি পদ্ধতি, কিন্তু তারা এত বড় হয় না. আপনি হ্যাকার সংস্করণ না, আপনি আছেন এছাড়াও সঙ্গে আচরণ করা যাচ্ছে কিছু জিনিস ডিক্রিপ্ট. সুতরাং সমস্যা এখন ভাল, এমনকি যদি হয় আমরা শক্তিশালী এনক্রিপশন আছে বিশ্বের অ্যালগরিদম, যদি আপনি একটি পছন্দ করুন বিশেষ করে দরিদ্র পাসওয়ার্ড, তাহলে এটি , আপনাকে অনেক সাহায্য করবে না, যেহেতু মানুষ এখনও এটা চিন্তা করতে পারবেন. এনক্রিপ্ট করা স্ট্রিং এইজন্য এবং এমনকি আপনি যদি এটি আবর্জনা একটি জগাখিচুড়ি মত দেখাচ্ছে যদি যে, তাদের কিছুই মানে তারা এখনও মাত্র কয়েক পাসওয়ার্ড চেষ্টা করতে হবে এর পরে, এটা চিন্তা করা খুব নিরাপদ নয়. সুতরাং একটি ভিডিও দেখছে যে যে বিন্দু করে তোলে. [ভিডিও প্লেব্যাক] -শিরস্ত্রাণ, আপনি পামর. কি করছেন? আপনি আমার মেয়ে কি করছেন? উজ্জ্বল পরিচয় করিয়ে আমাকে-অনুমতি তরুণ প্লাস্টিক সার্জন, ডঃ ফিলিপ Schlotkin ইচ্ছাশক্তি, সর্বশ্রেষ্ঠ নাক সমগ্র মধ্যে কাজের লোক মহাবিশ্ব ও Beverly পাহাড়. -সাউট মাননীয়. -রোস পেশা? আমি বুঝতে পারিনি. তিনি ইতোমধ্যেই একটি নাক পেশা ছিল. এটি একটি মিষ্টি ষোল ​​উপস্থিত ছিলেন. কোন. এটা কি আপনি মনে করেন না. এটা অনেক, অনেক খারাপ. আপনার কাছে আমার সমন্বয় না করা হলে বায়ু ঢাল, ডঃ Schlotkin ইচ্ছাশক্তি হবে তার পুরানো নাক আপনার মেয়ে ফেরত দিতে. কোন. কোথায় আপনি যে পেতে পারি? -ঠিক আছে. আমি বলতে পারবেন. আমি বলতে পারবেন. না, বাবা. না, আপনি না আবশ্যক. যথেষ্ট অভিজ্ঞ অধিকার, আমার প্রিয়. আমি আপনার নতুন নাক মিস্ করব. কিন্তু আমি তাকে সমন্বয় বলতে হবে না, কোন ব্যাপার কি. -অত্যন্ত ভাল. ডঃ Schlotkin, আপনার খারাপ না. -আমার আনন্দ. [সরঞ্জাম শাণিত হচ্ছে] কোন. অপেক্ষা করুন. অপেক্ষা করুন. আমি বলতে পারবেন. আমি বলতে পারবেন. আমি এটা কাজ করবে না. ঠিক আছে. আমার এটা দিন. -সংমিশ্রণ এক. ওয়ান. ওয়ান. দুই. দুই. দুই. -তিনটি. -তিনটি. -তিনটি. চারটি. চারটি. চারটি. -ফাইভ. -ফাইভ. -ফাইভ. তাই সমন্বয়, এক দুই, তিন, চার, পাঁচ. এটা stupidest সংমিশ্রণ আমি কখনও আমার জীবনে শোনা. যে জিনিস ধরনের একজন গাধা এর তার লাগেজের উপর থাকবে. আপনার মাননীয়, আপনি-ধন্যবাদ. -কি আপনি করবেন? আমি দেয়ালে বন্ধ. কোন আপনি না. আপনি পুরো সিনেমা বন্ধ. আমি ভুল বোতাম চাপা থাকা আবশ্যক. -ওয়েল, আবার লাগাতে হবে. আবার সিনেমা রাখুন. -হ্যাঁ, স্যার. হ্যাঁ, স্যার. এর, আর্নল্ড যেতে দিন. , গ্রেতসেন আসা. অবশ্যই, আপনি এখনও আমি করব জানি এই জন্য আপনি বিল আছে. [END টি ভিডিও প্লেব্যাক] ছিনিয়ে Boden: ঠিক আছে. ইতিমধ্যে আমরা যে বিষয়ে কথা বলছি তাই এখন যে কিছু উপায়ে নিরাপত্তা, সুন্দর একটু সিনেমা পোস্টার, তাই সাম্প্রতিক মধ্যে NSA দিয়ে দিন, এই বিষয় সবকিছু পর্যবেক্ষণে. এটা আপনি মনে করতে কঠিন হতে পারে এ গোপনীয়তা কিছু বাছাই আছে অনলাইন বিশ্বের, আমি বলতে পারে না, যদিও আপনি প্রিজম বিস্তারিত অধিকাংশ. তাই প্রিজম পরেও চলন্ত, আমরা চলুন না এখন, যে বিষয়ে কথা হবে আপনার ল্যাপটপ আমার মনে হয়. তাই এখানে আপ, আমি সুইচ করতে চান আমার প্রকৃত অ্যাকাউন্টে, আমার সামান্য পেংগুইন সঙ্গে. তাই আমি একটি পাসওয়ার্ড সেট আছে, এবং যে পাসওয়ার্ড আমি এটা হতে চান যাই হোক না কেন হয়. কিন্তু মনে রাখবেন যে কি আমি লগিং করছি , তাই এই লগইন সঙ্গে এ প্রম্পট, কিছু প্রোগ্রাম. এটা ছিল যে কিছু প্রোগ্রাম কিছু ব্যক্তির দ্বারা লিখিত. এবং তাই, যে ব্যক্তির, যদি তারা বিশেষ করে দূষিত, তারা পারে বলেন, ঠিক আছে, তাই যদি পাসওয়ার্ড আমি লিখতে যে সমান আমার প্রকৃত পাসওয়ার্ড, অথবা এটি সমান কিছু বিশেষ পাসওয়ার্ডটি যাও - ডেভিড ভয়ঙ্কর বা কিছু - তারপর তাদের ইন যাক সুতরাং একটি অনিষ্টকারী প্রোগ্রামার হতে পারে আপনার Macs-এর, বা অ্যাক্সেস উইন্ডোজ, বা কিছু. সুতরাং যে, যেহেতু, একটি উদ্বেগ অনেক বেশি হয় না আমি বলতে চাচ্ছি, এই লগইন প্রোগ্রাম যে ওএস এক্স, শত শত সাথে উপলব্ধ হচ্ছে বা হাজার হাজার মানুষ আছে এই কোড পর্যালোচনা. এবং তাই, আপনি কোথাও আপনার কোড, যদি এই স্ট্রিং সমান সমান হলে বলে ডেভিড সন্ত্রস্ত, লগইন, তাহলে কেউ নেই হতে যাচ্ছে, মত, অপেক্ষা করুন. এই অধিকার নয়. এই এখানে করা উচিত হবে না. সুতরাং যে আমরা জিনিস পেতে এক উপায় ধরনের নিরাপদ করা. এমনকি প্রোগ্রাম সম্পর্কে চিন্তা আপনি লিখুন যে. এর আপনি লগইন প্রোগ্রাম লিখেছিলেন বলে. আপনি লিখেছেন যে তাই এই লগইন প্রোগ্রাম, তাই সম্ভবত, আপনি একটি ভাল প্রোগ্রামার. আপনি যে কোনো অনিষ্টকারী লাগাতে যাচ্ছেন না এক্স সমান সমান হলে ডেভিড সন্ত্রস্ত আপনার কোড মধ্যে. কিন্তু এই প্রোগ্রাম, আপনি কি এই প্রোগ্রাম কম্পাইল ব্যবহার? ঝনঝন মত কিছু একটা. তাই কি যদি ঘটেছে যে ব্যক্তি ঝনঝন মধ্যে cased ঝনঝন বিশেষ লিখুন কিছু, মত আমি কম্পাইল করছি, যদি প্রোগ্রাম লগইন, তাহলে এই কোড লিখুন যদি বলেন যে প্রবেশ করুন প্রোগ্রামে এক্স সমান ডেভিড সন্ত্রস্ত সমান? তাই পুরোপুরি এখনো, কিন্তু আমরা একই আছে এখানে ইস্যু, যেখানে ঝনঝন, ভাল, হাজার হাজার, যদি না দশ হাজার হাজার মানুষ, আছে, ঝনঝন দিকে তাকিয়ে আছে কোড এর তার লাইন দিকে তাকিয়ে বলেন, ঠিক আছে, এখানে খারাপ কিছুই নেই. একথাও ঠিক যে, কেউ করছে এই দূষিত কিছু. কিন্তু কি মত, নিজেই ঝনঝন কি আমি ঝনঝন কম্পাইল তাহলে কি হবে? আমি কি কিছু কম্পাইলার আছে যে ঝনঝন করে টিপে যে ঝনঝন প্রনয়ন বলছেন যে এই বিশেষ হ্যাক, ঠিক আছে, আমি ঝনঝন কম্পাইল যখন তখন, এক্সিকিউটেবল আমি বিশেষভাবে হওয়া উচিত পেতে লগইন প্রোগ্রাম ও সন্নিবেশ ভিতরে এই পাসওয়ার্ড, সমান সমান ডেভ সন্ত্রস্ত? তাই মনে রাখবেন যে আপনার কম্পাইলার নিজেই কিছু সময়ে কম্পাইল করতে হবে. সুতরাং আপনি ঝনঝন কম্পাইল করতে পছন্দ কি যদি , নিজেই এর পরে, দূষিত হয় সঙ্গে পুরো মাতাল করা যায়নি উপায় নিচে রেখা. তাই এখানে, আমরা কেন থম্পসন আছে এবং ডেনিস Ritchie. তাই এই একটি প্রতিমাসংক্রান্ত ছবির হল. ডেনিস Ritchie ডানদিকে হয়. তিনি একটি প্রধান হল - প্রায় কাছাকাছি সি লিখেছিলেন তাই আপনি যা করতে পারেন এই শ্রেণীর জন্য তাকে ধন্যবাদ. কেন থমসন বাম এর. তাদের দুটি মূলত ইউনিক্স্ লিখেছে. ওয়েল, তারা প্রধান অবদানকারী ছিলেন ইউনিক্স্ মধ্যে. কিছু অন্যদের ছিল. কিছু সময়ে তাই কেন থম্পসন,, তিনি টুরিং পুরস্কার জেতে. আর টুরিং পুরস্কার, আমি সবসময় শোনা করেছি এই ভাবে রেফারেন্সড, এটা কম্পিউটার বিজ্ঞানের নোবেল পুরস্কার. সুতরাং টুরিং পুরস্কার, তিনি হয়েছে তার গ্রহণযোগ্যতা বক্তৃতা দিতে. এবং তিনি এই খুব বিখ্যাত বক্তৃতা দেয় এখন, অফিসার আরো নেভিগেশন প্রতিচ্ছবি বলা আমরা লিঙ্ক আছে যা ট্রাস্ট, অবশ্যই ওয়েবসাইটে করুন. এবং এই বক্তৃতায় তিনি, ঠিক আছে, বলছেন তাই আমি ইউনিক্স্ লেখেন, এবং এখন সব আপনি মানুষ ইউনিক্স্ ব্যবহার করছেন. এখন, লিনাক্স যে আজ স্মরণ ইউনিক্স্ সরাসরি বংশধর. OS X এর সরাসরি ইউনিক্স্ ব্যবহার করে. উইন্ডোজ এত না, কিন্তু অনেক ধারণা ইউনিক্স্ থেকে তোলা হয়েছিল. তাই তিনি, পর্যায় পর্যন্ত যায় এবং বলেছেন ঠিক আছে, আমি ইউনিক্স্ লিখেছে. আর ঠিক তাই আপনাকে বলছি কি জানেন, আমি আছি প্রতি লগ ইন করতে পারবেন আপনার কম্পিউটারের একক এক. এক্স যদি আমি এই বিশেষ এক করা থেকে সমান, কেন থমসন সন্ত্রস্ত সমান তারপর আমি লগইন করার অনুমতি দেওয়া করছি. সুতরাং মানুষ, ভাল, মত প্রসব আপনি তা করতে? আমরা লগইন প্রোগ্রাম দিকে তাকিয়ে এবং কিছুই নেই. তিনি ভাল, আমি কম্পাইলার পরিবর্তন, মত লগইন প্রোগ্রাম লগ ইন প্রবেশ করুন প্রোগ্রাম এখন থাকবে যাতে যে এক্স কেন থম্পসন সমান সমান সন্ত্রস্ত. এবং তারা ভাল, যে সত্য না বলে. আমরা কম্পাইলার এ খুঁজছেন, এবং করছি কম্পাইলার কোন লাইন নেই যে ভালো কোড. তিনি ঠিক আছে, মত আছে, কিন্তু আপনি কি কম্পাইলার দিয়ে কম্পাইল? এবং, হ্যাঁ, ভালো লেগেছে, তারা মনে করেন, এবং তিনি এর আমি আপনার কম্পাইলার দিয়েছে এক নই আপনি কম্পাইলার কম্পাইল ব্যবহার করে, তাই করছি আপনি একটি কম্পাইলার কম্পাইল হয় নিজেই দূষিত, এবং করবে না লগইন প্রোগ্রাম বিরতি. তাই মূলত, এই মুহুর্তে, আছে আপনি উৎস তাকান পারে কোন উপায় লগইন প্রোগ্রামের কোড ভুল দেখতে. এমনকি আপনি অল্পক্ষণের করতে পারেনি কম্পাইলার এর সোর্স কোড ভুল দেখতে. আপনি মেশিনের তাকান প্রয়োজন হবে কোড, প্রকৃত বাইনারি এই, অপেক্ষা করুন, দেখতে কম্পাইল কম্পাইলার কোড লাইনের এখানে করা উচিত হবে না. কিন্তু কেন থম্পসন এটা এক ধাপ গ্রহণ আরও এবং ভাল আছে, বলেন এই বিশেষ প্রোগ্রাম যে আসলে আপনি প্রোগ্রামের বাইনারি পড়তে সাহায্য, এবং তাই কেউ যে প্রোগ্রামটি ব্যবহার করা হলে বাইনারি পড়া, তারা এইসব দেখতে হবে কোড এর লাইন. তিনি সব, বলতে ঐ প্রোগ্রাম পরিবর্তন ঠিক আছে, আপনি এ খুঁজছেন কম্পাইলার, এই বিশেষ দেখাবেন না বাইনারি সেট. আমি তখন আপনি গ্রহণ করা প্রয়োজন যে একটি ধাপ আরও এবং মূলত, যে হতে পারে অপ্রত্যক্ষ্যতার নেওয়া একাধিক স্তর, এবং কিছু সময়ে, কোন এক আসলে এর চেক করা যাচ্ছে. তাই গল্পের নৈতিক আপনি থাকেন, হয় লেখা করা যাচ্ছে না এই শ্রেণীর মধ্যে ঝনঝন শব্দ. আপনি আরোহণ ব্যবহার করা চলুন এই ক্লাসে অনেক ঝনঝন. আপনি কি জানেন সব জন্য, ঝনঝন একটি দূষিত হয় প্রতি sabotaging হয় যে প্রোগ্রাম একক প্রোগ্রাম আপনি কি কখনও কম্পাইল করেছি. এবং যে খুবই অশুভ আপনাকে ছেড়ে বুধবার আপনি দেখুন, মনে রাখবেন. [সাধুবাদ] স্পিকার 2: পরের CS50 এ. স্পিকার 3: আপনি বলতে সাহস করবেন না. আপনি এটা করতে পারেন. আপনি আগে এই কাজ করেছি, আপনি এটা করতে পারেন আজ, আপনি আগামীকাল এটা করতে পারেন. আপনি বছর ধরে এই কাজ করছি. শুধু পর্যন্ত সেখানে যান এবং এই কাজের জন্য. আপনি এটা করতে পারেন. [সঙ্গীত বাজাচ্ছি]