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

c programming under unix

بدأه eman samir في 3 أبريل 2010 · 3 رد · 841 مشاهدة · في نظام تشغيل Unix & Linux
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ازيكم يا جماعة

أنا عندى مشكلة

i have hard coded string & i want to write it in a file

but when i cat the file ,it hasn't the whole string

here is the code

after declaring the vars

strcpy(strin,"host username ");

fdd=open("logfil",O_RDWR|O_CREAT|O_APPEND,600);

// printf("%s\n",strin);

write(fdd,strin,sizeof(strin));

write(fdd,"\n",2);

eman samir كتب:

ازيكم يا جماعة

أنا عندى مشكلة

i have hard coded string & i want to write it in a file

but when i cat the file ,it hasn't the whole string

here is the code

after declaring the vars

strcpy(strin,"host username ");

fdd=open("logfil",O_RDWR|O_CREAT|O_APPEND,600);

// printf("%s\n",strin);

write(fdd,strin,sizeof(strin));

write(fdd,"\n",2);

i declared the strin as :

char *strin;

strin=(char *)malloc(sizeof(char *)*512);

//////////////////////////////////////////////////////

i hope you can help me &tell me the mistake i made ,as i'm going to go mad

#2
strin=(char *)malloc(sizeof(char )*512);

بدون asterisk

strin=(char *)malloc(sizeof(char *)*512);

تم تعديل هذه المشاركة بواسطة apex في 4 أبريل 2010 في 01:00

name : mohamedyosry

#3
apex كتب:

strin=(char *)malloc(sizeof(char )*512);

بدون asterisk

strin=(char *)malloc(sizeof(char *)*512);

شكرا" ليك بجد

بس انا شغلت البرنامج هو صحيح تحايل بس عدلت فى الsizeof بتاع ال writeوحطيت 512 بدالها لانى قلت انها اكيد الsize فيه مشكلة

ملحوظة : من شهر كنت باكتب برنامج فيه pointers ولما شلت ال * ادانى segmentation fault

وده عشان الcasting

صحح لى لو فيه حاجة غلط عشان اكون فاهمة كويس

شكرا" مرة تانية

تم تعديل هذه المشاركة بواسطة eman samir في 4 أبريل 2010 في 21:03

#4

معلش وقت مارديت مكنتش مركز مع الكود كلة

بس فى الwrite فى غلط

write(fdd,strin,sizeof(strin));

الsize هنا هو حجم البوينتر وهو ثابت (2 بت او 4 بت على اجهزة اخرى) وليس حجم ما تم حجزة للبوينتر لذلك سيقوم بكتابة اول 4 بت من الجملة فقط

ملحوظة : من شهر كنت باكتب برنامج فيه pointers ولما شلت ال * ادانى segmentation fault

نصيحة : فى البرمجة لا تتبع هذا المنطق فال syntax ليس trial and error يستحسن تعمل الكاستنج للبوينتر قبل المساواة وهذا ما فعليتية فى الكود ولكن sizeof(char*) instead sizeof(char) تفرق 4 byte بدل 1 byte

name : mohamedyosry

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