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

مشكلة مع ال Pointers

مغلق
بدأه Wase3 Sadr في 23 فبراير 2005 · 13 رد · 717 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

أخواني .. شوفوا معاي هالـكود .. :

#include <iostream>
using namespace std;

char sub_string(char *source,int start,int count,char *dest);

void main()
{
	char *p="Professional Programming";
	int Start,counter;
	char *dest;

	cout<<"Start:";
	cin>>Start;

	cout<<"counter:";
	cin>>counter;

	cout<<sub_string(p,Start,counter,dest)<<endl;


}

char sub_string(char *source,int start,int count,char *dest)
{
	char *r=new char[];

	r[0]=source[start-1];

	for (int i=1;i<=count;i++)
	{
  r=source[start];
  start++;
	}

	dest=r;

	return *dest;
}

الكود هذا .. راح أرسل له الكلمة " Professional Programming "

وأبيه يبدا من الرقم 14 يعني حرف P ..

ويستمر يقرا بعدد 7 أحرف بعد الـ P ..

وبعد كذا يرجع لي في المتغير *dest النتيجة .. اللي هي الـ P والـ 7 أحرف بعده ..

يعني راح يكون : Program ..

المشكلة .. لما أطبق الكود في المايكروسوفت فيجوال c++ .. يعطيني وورنينج اللي هو :

warning C4700: local variable 'dest' used without having been initialized
Linking...

لكن .. عند تطبيق البروجرام مع هالوورنينج ! .. يسوي كل حاجة .. لكن في الـ dest ..

بس راح يرجع لي الـ P لوحدها .. بدون الأحرف السبعة اللي بعدها ..

رغم أن الـ *r فيها كلمة Program كاملة !!

اللي أستغربه .. عند إسنادي هنا :

	dest=r;

لا ينقل الا الـ r[0] ما الحل ؟!

أعتذر لإزعاجكم ..

Wase3 Sadr

#2

يجب أن تكون هكذا

dest='r';

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#3
error C2440: '=' : cannot convert from 'const char' to 'char *'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

عندما فعلت ما تقول .. تغيّر الخطأ إلى هذا الخطأ !!!!!

ما الحل ؟؟

تم تعديل هذه المشاركة بواسطة Wase3 Sadr في 24 فبراير 2005 في 00:55

#4

السلام عليكم

dest="";

جرب هذه

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#5

هلا اخوي ..

قصد الاخوان انك تسند لها اي حرف بين علامة تنصيص في البداية من التعريف ومايطلع الوورنينق ........

char *dest="";

وانا اقرا المثال انت تصعب الامور على نفسك ...

for (int i=0;i<count;i++)
	{
  r=source[start-1];
  start++;
	}

بدل من .....

r[0]=source[start-1];

for (int i=1;i<=count;i++)
{
 r=source[start];
 start++;
}

كذا المثال يمكن افضل ....

#include <iostream>
using namespace std;
char sub_string(char *source,int start,int count);

void main()
{
	char *p="Professional Programming";
	int Start,counter;
	char *dest="";

	cout<<"Start:";
	cin>>Start;

	cout<<"counter:";
	cin>>counter;

	cout<<sub_string(p,Start,counter)<<endl;
}
char sub_string(char *source,int start,int count)
{
	char *r=new char[];
	for (int i=0;i<count;i++)
	{
  r=source[start-1];
  start++;
	}

	return *r;
}

وكلها نفس الاداء ...

انا بحاول اشوف وين المشكلة وانزل الحل .....

وتقبل تحياتي .....

#6

السلام عليكم

أعتقد ان البرنامج يعمل بشكل صحيح

يعني sub_string تقوم بإرجاع char و هذا ما يحدث لكن إذا اردت ان ترجع string فاستخدم

c++ string او char * ك return type

و هناك شيئ اخر انت تستخدم dest ك local variable فقط لإعطائها قيمة r+ 7

يعني انها passed by value فإذا اردت تغيير قييمنها عليك تمرير pointer to pointer to char

char **

ارجو ان توضح النتيجة التي تريد الحصول عليها

#7

المشكلة يا أخوتي ..

أنا أستخدم الـ return حتى يرجع لي كلمة "Program" كاملة !!

بس البرنامج ما يرجع الا الحرف الأول P !!

شوفوا النتيجة في المرفقات !!

post-34217-1109336835_thumb.jpg

#8

وسيع صدر كلام ib_doom صحيح 100%

انا مجرب البرنامج طلع تمام ........

#include <iostream>
using namespace std;

char* sub_string(char *source,int start,int count,char *dest);

int main()
{
	char *p="Professional Programming";
	int Start,counter;
	char *dest=" ";
	cout<<"Start:";
	cin>>Start;
	cout<<"counter:";
	cin>>counter;
	cout<<sub_string(p,Start,counter,dest)<<endl;
	return 0;
}

char* sub_string(char *source,int start,int count,char *dest)
{
	char *r=new char[];
	for (int i=0;i<count;i++)
	{
  r=source[start-1];
  start++;
	}
	dest=r;
	return dest;
}

وتحياتي لكـ

#9

ياسلام عليكم ..

البرنامج أشتغل سليم .. وصار يرجع لي القيمة Program بشكل سليم :) ..

ووحده بوحده يا دبل .. :P .. انت ليه ما شلت dest=r;

واستخدم في اللوب dest وخلاص ياخي الله يهديك B)

بحيث يكون اللوب كذا :

for (int i=0;i<count;i++)
	{
  dest=source[start-1];
  start++;
	}

	return dest;

ربي يخليكم .. ضبطت معاي تمام .. وطلع الناتج سليم :)

تحياتي ..

Wase3 Sadr

#10

هههههههههههههههههههههههههههههههههههههههههههههههههه

حلوه

يعطيك العافية اخوي

تم تعديل هذه المشاركة بواسطة double في 25 فبراير 2005 في 22:11

#11

يعافيك .. والشكر لك والله يالغالي على هالمساعده ..

نعيدها لك في الأفراح .. والواجبات الجايه :D

#12

كلمة "program " يبيك ترجعها في ال dest والدالة لازم تكون void

تابع معي الحل زين ودقق في الخطوات.

void sub_string(char *source,int start,int count,char *&dest)

{

dest=new char [];

int i=0

for ( i=0;i<count;i++)

{

dest=source[start++];

}

}

#13
void sub_string(char *source,int start,int count,char *&dest)
{
if(start>count)
       dest=new char [start-count+1];
else
      dest=new char[count-start+1];
int i=0
for ( i=0;i<count;i++)
{
dest=source[start++];
}
dest='\0';
}

هذا هو الحل المثالي بإذن الله

#14
void sub_string(char *source,int start,int count,char *&dest)
{
dest=new char[count+1];
start--;
int i=0
for ( i=0;i<count;i++)
{
dest=source[start++];
}
dest='\0';
}

عفوا هذا الحل الصحيح

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

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