PDA

View Full Version : سوال: سوال درباره strcpy



ninjacvb
شنبه 31 اردیبهشت 1390, 10:25 صبح
بسم الله الرحمن الرحیم

میشه درباره 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 استفاده کرد. حالا نمیدونم تا چه حد نظرم درسته ؟ !!!

tdkhakpur
شنبه 31 اردیبهشت 1390, 16:04 عصر
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 یه عنوان مکانی از حافظه هم استفاده کنید.