بازگشت   پی سی سیتی > کامپیوتر اینترنت و شبکه Computer internet > زبان های برنامه نویسی Programming

زبان های برنامه نویسی Programming بحث در مورد زبانهای مختلف برنامه نویسی

پاسخ
 
ابزارهای موضوع نحوه نمایش
  #61  
قدیمی 01-28-2012
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض عدم استفاده از gets() در C++ سر ریزی بافر و مشکلات امنیتی

خدا چه میگی مهرگان سوالت مگه ای نیست که چجو از gets استفاده بکنی ؟

gets با cin.get خو فرق مکنه .

gets اصلا دیگه cin نمیخواد
تو الان سوالت چیه ؟

خو هر چی که میخوای با gets بگیر


کد:
#include <stdio.h> البته وقتی نیم اسپیس استاندارد رو یوز میکنی فکر کنم اینو نیاز نداره دیگه 

int main()
{
  char string [256];
  printf ("Insert your full address: ");
  gets (string);
  printf ("Your address is: %s\n",string);
  return 0
{
منتهی مشکل تکنیکی ای که وجود داره اینه که برنامه نویسها میگن از gets استفاده نکنین چون میتونه بافر اور فلو رخ بده و از این راه هکر ها خیلی سواستفاده میکنند

Function is intrinsically unsafe and should not be used
نقل قول:


Replace gets() with a C++ stream method that has a limit on the number of characters that will be read into the buffer (cin.getline(buffer, bufSize), for example).

If "buf" is a static buffer locally defined, bufSize can be replaced by sizeof(buffer). If malloc'd, use the malloc size.
Examples of Incorrect Code
کد:
 char str1[10];
gets(str1); 
    /* If the string is more than 10 characters, the overflow will spill over into the adjoining memory. */ 

راه درستش
کد:
 char str1[10];
fgets(str1, sizeof(str1), stdin); 
    /* Will not overflow.
Note that if buffer is malloc'd, sizeof() will not work and the malloc size should be used. */
/* In C++, use of iostream::getline() is preferred. */
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست




ویرایش توسط دانه کولانه : 01-28-2012 در ساعت 12:51 AM
پاسخ با نقل قول
کاربران زیر از دانه کولانه به خاطر پست مفیدش تشکر کرده اند :
جای تبلیغات شما اینجا خالیست با ما تماس بگیرید




  #62  
قدیمی 01-28-2012
مهرگان آواتار ها
مهرگان مهرگان آنلاین نیست.
مدیر تالار انگلیسی
 
تاریخ عضویت: Apr 2008
محل سکونت: کرمانشاه
نوشته ها: 1,577
سپاسها: : 3,750

4,670 سپاس در 1,282 نوشته ایشان در یکماه اخیر
مهرگان به Yahoo ارسال پیام
پیش فرض

آقا ای کده نگا بکو شما

مثلا میگم چند نفر دانشآموز مخوای وارد بکنی؟
طرف میگه n نفر
امجا (!) میگم خو اسمشه وارد بکو
آقا اسمشه نمیگیره

int n;
یا
char ch;
char str[100];

cin >> n;
gets(str);

الان str اصلا نمیگیره
__________________
پاسخ با نقل قول
  #63  
قدیمی 01-28-2012
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض استفاده از stringstream در c++ کار با رشته ها تفاوت با cin

متوجه شدم چی میگی مساله اینتر زدن هست . اینتر رو هم میریزه توی استرینگ ! .
بنابراین یه راهش اینه که اون یه دونه اینتر رو دور بریزی مثل مثالی که خودت زدی والبته راه چیپی نیست ها خود c++ اینو داره cin.ignore() بنابراین کاسه داغتر از اش نشو

یا اینکه :
کد:
#include <iostream>
#include <string>
#include <sstream>
#include <conio.h>

using namespace std;

int main ()
{
  string mystr;
  float price=0;
  int quantity=0;

  cout << "Enter price: ";
  getline (cin,mystr);
  stringstream(mystr) >> price;
  cout << "Enter quantity: ";
  getline (cin,mystr);
  stringstream(mystr) >> quantity;
  cout << "Total price: " << price*quantity << endl;
  getch();
  return 0;

}

برای اینکه متوجه بشی این استرینگ استریم چیکار میکنه اینو به کار ببر یه دقیقه :
کد:
stringstream(mystr) >> price; cout<<endl<<mystr<<" "<<price;
بعد وقتی ورودی میدی بهش اینو بده :

12d

خروجی که مشاهده میکنی اینه :

12d 12

یعنی 12d رو که رشته هست میریزه توی mystr بعد قسمت int از mystr رو میریزه توی price

اوکی ؟
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست




ویرایش توسط دانه کولانه : 01-28-2012 در ساعت 01:53 AM
پاسخ با نقل قول
کاربران زیر از دانه کولانه به خاطر پست مفیدش تشکر کرده اند :
پاسخ


کاربران در حال دیدن موضوع: 1 نفر (0 عضو و 1 مهمان)
 

مجوز های ارسال و ویرایش
شما نمیتوانید موضوع جدیدی ارسال کنید
شما امکان ارسال پاسخ را ندارید
شما نمیتوانید فایل پیوست در پست خود ضمیمه کنید
شما نمیتوانید پست های خود را ویرایش کنید

BB code is فعال
شکلک ها فعال است
کد [IMG] فعال است
اچ تی ام ال غیر فعال می باشد



اکنون ساعت 03:01 AM برپایه ساعت جهانی (GMT - گرینویچ) +3.5 می باشد.



Powered by vBulletin® Version 3.8.4 Copyright , Jelsoft Enterprices مدیریت توسط کورش نعلینی
استفاده از مطالب پی سی سیتی بدون ذکر منبع هم پیگرد قانونی ندارد!! (این دیگه به انصاف خودتونه !!)
(اگر مطلبی از شما در سایت ما بدون ذکر نامتان استفاده شده مارا خبر کنید تا آنرا اصلاح کنیم)


سایت دبیرستان وابسته به دانشگاه رازی کرمانشاه: کلیک کنید




  پیدا کردن مطالب قبلی سایت توسط گوگل برای جلوگیری از ارسال تکراری آنها