1 00:00:00,000 --> 00:00:00,180 2 00:00:00,180 --> 00:00:02,920 >> SPEAKER 1: اجازه دهید به یک برنامه بنویسید که می شود یک رشته از کاربر بدون 3 00:00:02,920 --> 00:00:05,700 با استفاده از CS50 کتابخانه عمل GetString. 4 00:00:05,700 --> 00:00:08,720 برای این کار، ما میام جلو و استفاده از scanf، تابع که GetString 5 00:00:08,720 --> 00:00:10,950 تابع در واقع با استفاده از در زیر هود. 6 00:00:10,950 --> 00:00:13,780 اما من قصد دارم برای انجام این کار به عمد در راه حشره دار. 7 00:00:13,780 --> 00:00:17,230 من قصد دارم برای انجام این کار در راه است که من فکر می کنم حق خواهد بود، اما معلوم است که 8 00:00:17,230 --> 00:00:19,380 فرض من رفتن به کاملا، کاملا ناقص. 9 00:00:19,380 --> 00:00:20,800 و در واقع، بسیار خطرناک است. 10 00:00:20,800 --> 00:00:24,750 از آنجا که اشکالات مانند یکی از من در مورد هستم را می توان با دشمنان بهره برداری 11 00:00:24,750 --> 00:00:28,870 به طوری که دستگاه شما یا برنامه شما می تواند بیش از به طور بالقوه گرفته شده است. 12 00:00:28,870 --> 00:00:30,200 >> اجازه دهید در آغاز به شرح زیر است. 13 00:00:30,200 --> 00:00:33,540 اول اجازه دهید رشته ما اعلام، در غیر این صورت در حال حاضر به عنوان یک ستاره کاراکتر شناخته شده است، 14 00:00:33,540 --> 00:00:34,750 و تماس آن. 15 00:00:34,750 --> 00:00:39,400 بیایید بعدی به کاربر برای یک رشته، به عنوان با "رشته لطفا." و 16 00:00:39,400 --> 00:00:44,250 اجازه دهید در حال حاضر رشته از کاربر دریافت کنید با استفاده از scanf، نقل قول نقل قول را تمام کردن، "٪ s را." به 17 00:00:44,250 --> 00:00:47,760 به عبارت دیگر، اجازه دهید scanf که ما اطلاع در واقع انتظار برای دریافت یک رشته 18 00:00:47,760 --> 00:00:48,630 از کاربر. 19 00:00:48,630 --> 00:00:50,810 >> اما در حال حاضر ما نیاز به scanf بگویید یک چیز دیگر - 20 00:00:50,810 --> 00:00:53,350 که در آن برای قرار دادن رشته ای که کاربر فراهم می کند. 21 00:00:53,350 --> 00:00:57,840 خوب، من قصد دارم کاملا به سادگی شروع با کاما از هم است، مشخص است که من می خواهم 22 00:00:57,840 --> 00:00:59,320 scanf برای قرار دادن رشته وجود دارد. 23 00:00:59,320 --> 00:01:04,818 من بعد از رفتن به نسخه قابل چاپ کردن چیزی مانند چون printf "با تشکر برای٪ s را 24 00:01:04,818 --> 00:01:10,670 بک اسلش نفر کاما از هم. "و مانند همیشه، من رفتن به تصویب در رشته ها. 25 00:01:10,670 --> 00:01:14,920 حالا اجازه دهید را ذخیره کنید، تدوین و اجرای این برنامه، و ببینید که اگر ما نمی توانیم وادار 26 00:01:14,920 --> 00:01:16,590 مشکل من پیش بینی کرد. 27 00:01:16,590 --> 00:01:18,650 >> را scanf-1. 28 00:01:18,650 --> 00:01:20,960 ./scanf-1. 29 00:01:20,960 --> 00:01:21,830 رشته لطفا. 30 00:01:21,830 --> 00:01:25,540 اجازه دهید چیزی شبیه به، ارائه "سلام." "با تشکر از تهی." هووم، این نیست 31 00:01:25,540 --> 00:01:26,750 آنچه که من انتظار شد. 32 00:01:26,750 --> 00:01:28,240 بنابراین چه خبر است اینجا؟ 33 00:01:28,240 --> 00:01:32,040 >> خب، معلوم می شود چرا که ما اعلام کرد به عنوان یک ستاره کاراکتر اما ما نمی 34 00:01:32,040 --> 00:01:36,120 در واقع در بازدید کنندگان به آدرس های ذخیره شده مقدار واقعی حافظه، scanf نداشت 35 00:01:36,120 --> 00:01:38,940 در هر نقطه برای قرار دادن رشته که کاربر تایپ شوید 36 00:01:38,940 --> 00:01:42,510 در واقع، اگر کاربر بود به حال تایپ یک رشته بسیار طولانی تر از "سلام" 37 00:01:42,510 --> 00:01:46,780 به عنوان مثال چند خط از متن و یا چند پاراگراف از متن، آن را کاملا 38 00:01:46,780 --> 00:01:50,280 ممکن است که ما ممکن است باعث به اصطلاح گسل تقسیم بندی. 39 00:01:50,280 --> 00:01:53,570 >> از آنجا که scanf است که نمی دانیم که من در واقع یک آدرس قرار داده نشده 40 00:01:53,570 --> 00:01:54,610 در داخل است. 41 00:01:54,610 --> 00:01:58,000 در عوض، آن را به برخی از ارزش در ها، برخی از الگوی از بیت ها که ممکن است 42 00:01:58,000 --> 00:02:00,910 خیلی خوب است یک مقدار زباله، وجود دارد فقط توسط شانس. 43 00:02:00,910 --> 00:02:04,600 و scanf است هنوز هم به تلاش برای ارسال رشته کاربر به آن آدرس، 44 00:02:04,600 --> 00:02:08,789 حتی اگر آن یک مقدار زباله، است که در واقع می تواند باعث سقوط. 45 00:02:08,789 --> 00:02:10,130 >> پس چگونه می خواهیم به رفع این؟ 46 00:02:10,130 --> 00:02:12,523