>> SPEAKER 1: اجازه دهید به یک برنامه بنویسید که می شود یک رشته از کاربر بدون
با استفاده از CS50 کتابخانه عمل GetString.
برای این کار، ما میام جلو و استفاده از scanf، تابع که GetString
تابع در واقع با استفاده از در زیر هود.
اما من قصد دارم برای انجام این کار به عمد در راه حشره دار.
من قصد دارم برای انجام این کار در راه است که من فکر می کنم حق خواهد بود، اما معلوم است که
فرض من رفتن به کاملا، کاملا ناقص.
و در واقع، بسیار خطرناک است.
از آنجا که اشکالات مانند یکی از من در مورد هستم را می توان با دشمنان بهره برداری
به طوری که دستگاه شما یا برنامه شما می تواند بیش از به طور بالقوه گرفته شده است.
>> اجازه دهید در آغاز به شرح زیر است.
اول اجازه دهید رشته ما اعلام، در غیر این صورت در حال حاضر به عنوان یک ستاره کاراکتر شناخته شده است،
و تماس آن.
بیایید بعدی به کاربر برای یک رشته، به عنوان با "رشته لطفا." و
اجازه دهید در حال حاضر رشته از کاربر دریافت کنید با استفاده از scanf، نقل قول نقل قول را تمام کردن، "٪ s را." به
به عبارت دیگر، اجازه دهید scanf که ما اطلاع در واقع انتظار برای دریافت یک رشته
از کاربر.
>> اما در حال حاضر ما نیاز به scanf بگویید یک چیز دیگر -
که در آن برای قرار دادن رشته ای که کاربر فراهم می کند.
خوب، من قصد دارم کاملا به سادگی شروع با کاما از هم است، مشخص است که من می خواهم
scanf برای قرار دادن رشته وجود دارد.
من بعد از رفتن به نسخه قابل چاپ کردن چیزی مانند چون printf "با تشکر برای٪ s را
بک اسلش نفر کاما از هم. "و مانند همیشه، من رفتن به تصویب در رشته ها.
حالا اجازه دهید را ذخیره کنید، تدوین و اجرای این برنامه، و ببینید که اگر ما نمی توانیم وادار
مشکل من پیش بینی کرد.
>> را scanf-1.
./scanf-1.
رشته لطفا.
اجازه دهید چیزی شبیه به، ارائه "سلام." "با تشکر از تهی." هووم، این نیست
آنچه که من انتظار شد.
بنابراین چه خبر است اینجا؟
>> خب، معلوم می شود چرا که ما اعلام کرد به عنوان یک ستاره کاراکتر اما ما نمی
در واقع در بازدید کنندگان به آدرس های ذخیره شده مقدار واقعی حافظه، scanf نداشت
در هر نقطه برای قرار دادن رشته که کاربر تایپ شوید
در واقع، اگر کاربر بود به حال تایپ یک رشته بسیار طولانی تر از "سلام"
به عنوان مثال چند خط از متن و یا چند پاراگراف از متن، آن را کاملا
ممکن است که ما ممکن است باعث به اصطلاح گسل تقسیم بندی.
>> از آنجا که scanf است که نمی دانیم که من در واقع یک آدرس قرار داده نشده
در داخل است.
در عوض، آن را به برخی از ارزش در ها، برخی از الگوی از بیت ها که ممکن است
خیلی خوب است یک مقدار زباله، وجود دارد فقط توسط شانس.
و scanf است هنوز هم به تلاش برای ارسال رشته کاربر به آن آدرس،
حتی اگر آن یک مقدار زباله، است که در واقع می تواند باعث سقوط.
>> پس چگونه می خواهیم به رفع این؟