السلام عليكم
مساعدة بسيطة في المؤشرات هناك شيء مبهم لا أعرف ما هو؟
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int lire(char *, int );
int main(int argc, char *argv[])
{
char nom[10];
printf("Quel est votre nom ? ");
if(lire(nom, 10))
printf("Ah ! Vous vous appelez donc %s !\n\n", nom);
return 0;
}
int lire(char *chaine, int longueur)
{
char *positionEntree = NULL;
if (fgets(chaine, longueur, stdin) != NULL)
{
positionEntree = strchr(chaine, '\n');
if (positionEntree != NULL)
{
*positionEntree = '\0'; // هنا الإشكالية
}
return 1;
}
else
{
return 0;
}
}التناقض الذي وقعت فيه هو كالتالي :
لماذا عدلنا على القيمة النصية الثابتة التي يتضمنها المؤشر كعنوان؟
الشيء المبهم بالنسبة لي في الكود !!!
*positionEntree = '\0';
لنأخذ هذا المثال:
char *B = "hello !";
فكما نعلم فإن المؤشر B يؤشر على سلسلة ثابتة من الحروف مخزنة في مكان ما في الذاكرة.
يمكننا تغيير المؤشر ليؤشر على شيء آخر(نص ثابت ,عنوان لمتغير char..) أما السلسلة النصية الثابتة يمكننا قراءتها ولكن لا يمكن التعديل عليها
بتبديل حرف ما من الأحرف التي تتكون منها
char *p="abcdef"; *p='z'; // error
ولكن في المثال السابق
*positionEntree = '\0'; // لا وجود لأي خطأ الكود يشتغل عادي
وهنا أقع في تناقض
ما هو تفسيركم لهذاالأخير؟؟

