نمایش نتایج 1 تا 2 از 2

نام تاپیک: سوال درباره strcpy

  1. #1

    Question سوال درباره strcpy

    بسم الله الرحمن الرحیم

    میشه درباره std::strcpy که از هدر cstring است و در سربارگذاری زیر استفاده شده توضیح مختصر و مفید بفرمایید ( میدونم کارش چیه اما . . . )

    const String &String::operator+=( const String &right ) 
    {
    size_t newLength = length + right.length; // new length
    char *tempPtr = new char[ newLength + 1 ]; // create memory

    strcpy( tempPtr, sPtr ); // copy sPtr
    strcpy( tempPtr + length, right.sPtr ); // copy right.sPtr

    delete [] sPtr; // reclaim old space
    sPtr = tempPtr; // assign new array to sPtr
    length = newLength; // assign new length to length
    return *this; // enables cascaded calls
    } // end function operator+=


    ( اما . . . در خط 7 چه اتفاقی میفته دقیقا ؟ و اینکه وقتی برای پارامتر مقصد و مبدا در strcpy اشاره گر قرار بدیم چه رفتاری نشون میده )
    نظر من اینه که اگه خیلی خوش شانش باشیم خط 7 یه اشاره گر دقیقا دنباله ( ادامه ی ) tempPtr خواهد بود و برای چاپ تمام رشته هم میشه از tempPtr استفاده کرد. حالا نمیدونم تا چه حد نظرم درسته ؟ !!!

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: سوال درباره strcpy

    strcpy کار خاصی بجز انتفال یک رشته که به 0 ختم شده داخل رشته دیگه چیز دیکه ای نیست حالا اگر بحث روی پارامترهای ورودی باشه این پاراکترها بصورت زیر تعرریف شده اند.
     
    strcpy(char *, char*);

    که در فوق char * به این معنی هست که این محتوا فقط میتونه آدرس باشه حالا هر ادرس درش قرار بدید ه و لزوما میتونید تحلیلتان را بصورت زیر هم در نظر بگیرید.

    unsigned long ptr1, ptr2;
    char *str1=" ", *str2="hello";
    ptr1 = (long)str1;
    ptr2= (unsigned long)str2;
    strcpy((char*)ptr1, (char*)ptr2);
    cout<<(char*)ptr1;

    که در فوق میبینید میتونید حتی عدد رو هم برای پاس داده ن strcpy یه عنوان مکانی از حافظه هم استفاده کنید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •