დინამიკები 1: მოდით ახლა დაფიქსირება რომ გასულ პროგრამა. და ამ დროს, მოდით ცალსახად გამოყოფს გარკვეული მეხსიერება, რომელიც მომხმარებლის შეყვანის იქნება შენახული. ამისათვის, მოდით აიფოუნ in, რომ პირველი ხაზი კოდი, სადაც ჩვენ განაცხადა s ადრე იყოს char ვარსკვლავი. ამ დროს, მოდით ხელახლა აცხადებენ ეს შემდეგნაირად - char s bracket 16, მაგალითად, close bracket. სხვა სიტყვებით რომ ვთქვათ, მოდით აცხადებენ s არ აღარ იქნება მისამართი ხასიათი, არამედ მასივი 16 სიმბოლო. ამ გზით, მომხმარებელს შეუძლია აკრიფოთ მდე 15 გმირები და მაინც დატოვოს ოთახი null terminator. მოდით გაგრძელება შენახვა, კომპილაციის, და გაუშვით ეს პროგრამა. რათა scanf2 dot slash scanf2. მოდით ახლა აკრიფოთ სიმებიანი მოსწონს hello, და ჩვენ მადლობა გადაუხადა hello. ახლა, იქ მაინც პრობლემა. მე მხოლოდ აკრეფილი hello, რომელიც მხოლოდ ხუთი გმირები, პლუს 1 null terminator. იგი ტოვებს us მხოლოდ საჭიროება ექვსი bytes. მაგრამ, სამწუხაროდ, ჩვენ მხოლოდ გამოყოფილი 16 შეადგენს. ასე რომ, თუ მომხმარებლის რეალურად სახის 16 პერსონაჟი, ან 17, ან რამდენიმე ასეული გმირები, ჩვენ ჯერ კიდევ არ აპირებს გაქვთ საკმარისი ოთახი მეხსიერებაში მომხმარებლის შეყვანის. და, ფაქტობრივად, ეს არის ის, რაც მიღების მომხმარებლის შეყვანის ასე რთულია ზოგადად. და მართლაც, სწორედ ამიტომ განხორციელდა მიიღოს სიმებიანი ფუნქცია პირველი ადგილი CS50 ბიბლიოთეკა - გაერკვნენ, თუ როგორ უნდა გაუმკლავდეს იმ სიტუაციები, როდესაც მომხმარებლის ტიპების მეტი სიმბოლო, ვიდრე ჩვენ თავდაპირველად მოსალოდნელია. გულწრფელად ვამბობ, გარეშე მთლიანად გადაწერა ეს პროგრამა, არ არსებობს სუფთა გადაწყვეტა. პირიქით, რაც ჩვენ უნდა გავაკეთოთ არის მიიღოს ხასიათი მომხმარებელს ერთი დრო, ისევ და ისევ. და ყოველ წერტილს, თუ ჩვენ გვესმის, რომ ჩვენ მეხსიერება ღალატობს, ჩვენ უნდა at რომ წერტილი დაბრუნდეს და გადაანაწილოს ზოგიერთი მეტი მეხსიერების, კოპირება მომხმარებლის ანკეტის წინა შეიტანენ ჩვენი პირველი ბლოკი მეხსიერების შევიდა ახალი, დიდი ბლოკი მეხსიერება. და შემდეგ გაიმეოროს ეს პროცესი ისევ და ერთხელ სანამ შესახებ კეთდება უზრუნველყოფს მისი შეყვანა.