الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مالفرق بين strcpyو strcat؟

مغلق
بدأه n3rd في 31 ديسمبر 2006 · 17 رد · 4,890 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مالفرق بين strcpyو strcat؟

وهذا مثال عليه

strcpy(evilbuf,userreq);

strcat(evilbuf,target[targetnum]);

strcat(evilbuf,nops);

strcat(evilbuf,shellcode);

strcat(evilbuf,"\r\n");

strcat(evilbuf,passreq);

ولكن لم أفهم الفرق الجوهري بينهم؟

=-=-=-=-=-=-=-=-=-=-=-=

طيب وعندي سؤال راح أضعه لكم وراح أضعه في قسم الإسمبلي:

الآن لما بكون قدامي eXploit.c وطبعا الشل كود موجود أمامي (وله مهمة يقوم بها ولنقل مثلا تنزبل برنامج وتنفيذه) أنا لو حبيت أغير الشل كود هذا بشل كود من عندي (ويقوم مثلا

بمهمة كوماند إكزيكيوشن على بورت معين)ماهي الأشياء اللتي أغيرها في ملف الـeXploit عشان ينفع التعديل معي؟

وشكرا مقدما

أخوكم خالد النويصر من الدمام :)

#2

strcpy يبدأ من الخانة a[0] لكن الـ strcat تبدا من الـ null

#3

ممكن شرح

ما وضحت لي؟

وش قصدك يعني؟

أحتاج توضيح أخوي وشاكر لك

وياليت تعطيني مثال (أو بريمج صغير) !

ومشكور

#4

السلام عليكم و رحمة الله و بركاته

أخي الكريم The_Sniper أعتقد أنك تتعلم ال c و ليس c++ أن لم تخني الفطنة .

عموما strcpy هي لنسخ القيمة النصية المرغوب في وضعها في المصفوفة النصية مثال :

 char name[4];
strcpy(name, "AmR");
printf("%s", name);

الناتج AmR

ماذا حدث هنا كل ما قومت به هو عمل مصفوفة تضم أربعة متغيرات لوضع أسمي المكون من ثلاثة حروف و الحرف الأخير هو حرف غير مرئي بالطبع هو null char أزي كنت لا تعرف ما هو ال null char أعتقد أن عليك أن تراجع أكثر عموما توضيح بسيط ال null char هو حرف غير مرئي للأبلاغ بنهاية النص

و بالنسبة ل strcat فهي تضيف قيمة نصية للنص الموجود أساسا في المصفوفة و تبدء عملية الأضافة من null char مثال :

char name[9];
strcpy(name, "AmR");
strcat(name," EiSa");
printf("%s", name);

الناتج AmR EiSa

أتمني من الله أن يكون سهل لي في توصيل المعلومة إليك .

عمرو عيسي

#5

وبالنسبة أخى لل exploit فأنت أكتب برنامجك بلغة السى ومن ثم أستخدم محرر للنظام الستة عشرى لرؤية كوده ومن ثم أكتبه فى ال

exploit

أرجو أن أكون أفدتك

سلام

befor any great jop there is a bad jop had done

#6

إلي دخل ال exploit و الستة عشري في الموضوع محل النقاش ؟

#7
اقتباس
الآن لما بكون قدامي eXploit.c وطبعا الشل كود موجود أمامي (وله مهمة يقوم بها ولنقل مثلا تنزبل برنامج وتنفيذه) أنا لو حبيت أغير الشل كود هذا بشل كود من عندي (ويقوم مثلا

بمهمة كوماند إكزيكيوشن على بورت معين)ماهي الأشياء اللتي أغيرها في ملف الـeXploit عشان ينفع التعديل معي؟

أنظر أخى أنا أجواب على أستفسار أخى sniper أيضا حتى نوفر عليه طرح موضوع أخر

befor any great jop there is a bad jop had done

#8

لم ألاحظ السؤال أساسا لأني كتبت الأجابة علي مرتين , :)

#9

بالنسبة لقيمة NULL فمن اسمها هي قيمة اي تعني قيمة في حال عدم وجود قيمة

يوجد طريقة اخرى وهي الحرف الصفري '0\' والذي يعني نهاية السلسة ايضا , وهذا الحرف والقيمة NULL مهمان في عملية النسخ المحدد strncpy عندها يجب تعيين الحرف الاخير بأنه حرف صفري او قيمة NULL

تم تعديل هذه المشاركة بواسطة time1 في 9 يناير 2007 في 06:47

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#10

السلام عليكم و رحمة الله و بركاته

أخي الكريم time1 الحرف أسمه null فعلا و ليس مقصدو به أنه ليس زي قيمة و لكن يقصد به أنه لا يظهر في النصوص أو حتي في strlen , أنظر أخي الكريم إلي الصورة المرفقة

Ascii.png

أنت بجد شككتني في نفسي و كتبي و الناس إلي بتدرس ليه :wacko:

عمرو عيسي

#11

ملاحظة هذا الرد علي ردك قبل التعديل ؟

و ملاحظة قيمة ال null char ليس null لأن الصفر يحمل قيمة و هي الصفر نفسه أما ال null فهو يرمز إليه بالرمز فاي ( معذرة لا أعرف مكانه في لوحة المفاتيح ) .

عمرو عيسي

#12

ولكن على حسب مادرست بأن قيمة NULL تعني أنه لا يوجد قيمة والتي تساوي الصفر !! أي يفضل استخدام الـ NULL دائما بدلا من الصفر

وهذا كان واضحا لي عند محاولتي الوصول إلى اعضاء المصفوفة "السلسة النصية " فكنت اكرر حلقة التكرار طالما لم اصل إلى القيمة صفر أو القيمة NULL

والذي كان يظهر لي هذا الشئ هذا المثال :

لاحظ هذه الاكواد المخصصة لطباعة السلسة Ali

الكود الاول:

	char y[4]={"Ali"};
for(int i=0;y!=0;i++)
cout<<y<<endl;

الكود الثاني :

	char y[4]={"Ali"};
for(int i=0;y!=NULL;i++)
cout<<y<<endl;

الكود الثالث :

	char y[4]={"Ali"};
for(int i=0;y!='\0';i++)
cout<<y<<endl;

لاحظ معي استخدمنا مرة NULL ومرة الصفر ومرة الحرف الصفري .

كما قلت لك , بانني على حسب مادرست بأن القيمة NULL == صفر == لا شئ . ولا اعني بالصفر الصفر الحسابي .

تعديل بسيط عبارة عن اضافة :

اقتباس
أنت بجد شككتني في نفسي و كتبي و الناس إلي بتدرس ليه

وانا بجد ماعرف فين النقطه الي شككتك فيها ؟

انا كان كل حديثي حول الحرف الصفري وعن القيمة NULL والتي مازلت اصر بأنها قيمة فعليه ولكن تعني لا شئ !!

وكما قلت لك قبل التعديل عندما اكتب NULL أو اكتب صفر فكلا الحالتين سيقبل البرنامج NULL ونعرفها .. والصفر مكانها بالاسكي

وبالنسبة لردي السابق فقد كان :

اقتباس
بالنسبة لقيمة NULL فمن اسمها هي قيمة اي تعني قيمة في حال عدم وجود قيمة

يوجد طريقة اخرى وهي الحرف الصفري '0\' والذي يعني نهاية السلسة ايضا , وهذا الحرف والقيمة NULL مهمان في عملية النسخ المحدد strncpy عندها يجب تعيين الحرف الاخير بأنه حرف صفري او قيمة NULL

اين التشكيك؟ :wacko:

تحياتي وتقديري لك

تم تعديل هذه المشاركة بواسطة time1 في 9 يناير 2007 في 13:57

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#13

أخي الكريم أنا لم أشر للقيمة null في كلامي السابق و لكني أشرت إلي null char , و معذرة الأن فلا أملك من الوقت لبقية الرد .

عمرو عيسي

#14

كلام الاخ روت ما يتعارض مع كلامك يا اخوي time

for(int i=0;y!=0;i++)

وش المشكلة هنا ؟؟؟؟؟

الصفر هذا يا طويل العمر قيمة الاسكي وعلى فكرة تقدر تقول ان الـ expression

y!= 0

هنا اصلا يصير فيه casting على فكرة والطريقة انك قاعد تقارن char بـ int وهنا يحدث الكاستينق انت قاعد تقارن قيمة الاسكي 0 وليس الصفر نفسه لان قيمة الاسكي لصفر 48d او 30h

ان شاء الله فهمت قصدي بالكاست يعني كانك سويت

toascii(y)!=0

هذا الي صار فعلياً والصفر NULL كلهم نفس الشي اكيد بس اسهل لك انت كمبرمج بعدين علشان تعرف انك تقصد بالصفر NULL (كلامي خرابيط ما اعرف اشرح العذر والسموحة)

#15

استاذي الفاضل NullFlag انا لم اعارض الاخ روت في شي

وبالنسبة لـ NULL وصفر فأنا مثل ماقلت بردي السابق بانني لا اقصد الصفر الحسابي وانما موقعه بالاسكي .

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#16

اعتذر عن عدم اكمالي للرد لسوء خدمة الانترنت عندي حاليا ,

لكن كل ماكنت اقصده بأن القيمة NULL والتي تساوي الصفر "ترتيبها في الاسكي " والتي هي عبارة عن قيمة ثابتة معرفة داخل ملف iostream وباقي الملفات التابعة للمكتبة المعيارية تعني "لا شئ " وكما قلت في أول رد لي فإن استخدامنا للحرف الصفري أو NULL هو فقط للاخبار بنهاية السلسة .

char y[]={'A','l','i',NULL};

char y[]={'A','l','i','\0'};

لا أعلم بعد ما الغريب في ما ذكرت ؟!!!! :wacko:

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#17

فيه لخبطه بالفهم :D بس

المشكلة هي انا الي فهمت من كلامك ان المقصود بـ NULL هو صفر ويخزن كصفر اقصد '0' :)

وانت ما ذكرت صفر الاسكي ولكن قلت صفر وبس وصار فيه لبس

كل واحد يصلح سيارته

#18

ملاحظة صغيرة

null = \0

و هذه من الطرق المستخدة لحساب طول المصفوفة

wihle(a[x] != \0)

{

x++;

}

و هذه طريقة بدائية و لكنها مجدية

بالنسبة للدالتين

واحد تقوم بنسخ دالة في أخرى

و الأخرى تقوم بإلصاق دالة في أخرى

هذا الموضوع مغلق.

مواضيع مشابهة