ابحث عن حجز وإخلاء الذاكرة في لغة سي -Memory Allocation- ستستخدم دوال calloc و malloc و free
الدرس بالعربية يُسمى المؤشرات Pointers
كيفية اخلاء سلسلة في لغة (how to empty a string) في لغة ِC
- لا أعلم ما الذي تريده تحديداً، إن كنت فقط تريد أن تكون هناك قيمة إبتدائية مع كل بداية حلقة يكفيك أن تقوم بتعريف مصفوفة سلسة الرموز داخل الحلقة كما في المثال التالي:
السؤال غير واضح,
أولا لا يوجد شيء اسمه string في الc, بل هناك character array تنتهى ب"كود الاسكى صفر", لا يهم ما بعدها, ما بعدها هو قيم عشوائية. اذا كان اول char في الstring هو "\0" فاذا الstring فارغ.
لتحميل الstring بقيم جديدة يمكنك ببساطة استخدام strcpy, و هي تقوم بنقل مصفوفة الchar الى الstring و تضع "\0" في اخره لتعرف الدوال الأخرى ان هذه هي نهاية الstring. كما يمكنك استخدام loop لتقوم بتحميل ما تريده في الstring.
في الكود الذى كتبته شيء خطير, هو انك حجزت عدد موازى لكلمة value لهذه المصفوفة, فاذا قمت بكتابة شيء أخر أطول سوف يحدث Access overrun,
هذه الصيغة أفضل :
char string[251];
strcpy(string,"value");
لديك خلط بين ماهو موجود بالذاكرة فعليا وبين محتوي سلسلة الحروف لديك
مادامت السلسلة تحتوي علي 0\ في اول خانة فهي string فارغة مهما كانت قيمة باقي الخانات وللتعامل معاها يجب أن تستخدم دوال ال string فمثلا
\0alue
إذا تعاملت معاها كstring فهي string فارغةوإذا تعاملت معاها كمجرد خانات عادية فهي غير فارغة وهذا هو سبب المشكلة لديك.
ما يميز الstring هو وجود ال 0\ وفي لعبتك الstring الاصلية
\0alue\0
تقوم بكتابة حرف جديد من البداية فى كل مرة وبالتالي تقوم بمسح اول حرف وهو 0\ وبالتالي تتعامل الدالة مع
aalue\0
وهذا ليس ما تريده، ماتريده هو التعامل مع الأحرف الحالية فقط وليس أبعد من ذلك وبالتالي تحتاج لإيقاف عملية قراءة الخانات بأن تضع 0\ بعد الحرف الحالي هكذا بفرض إدخال a ثم q ثم x
a\0lue\0
aq\0ue\0
aqx\0e\0
وهذا هو الكود للتوضيح
int len=strlen(string);
string[len]='a';
string[len+1]='\0';
بصراحة لم أفهم هل تريد من المستخدم ادخال space لتقوم بتنفيذ كود ما مثلا أم تريد قراءة نص به مسافات كهذا مثلا
char input[100];
cin.getline(input,sizeof(input));
printf(input);
ما مشكلة الكود الخاص بgetchar
التعليقات