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

دالة لإعادة سطر من ملف

بدأه SIFE في 3 نوفمبر 2010 · 1 رد · 366 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي مشكلSegmentation fault

الكود:

#include<stdio.h>
#include<stdlib.h>

#define MAX_BUF 32

char *rline(char *file);

main()
{
char *cch;
FILE *ss;
ss=fopen("ss", "r");
while(!feof(ss))
 {
  cch = rline(ss);
  printf("%s\n", cch);
  free(cch);
 }
fclose(ss);
return 0;
}

char *rline(FILE *in)
 {
  char c, *ch;
  int i=0;
  ch=(char*)malloc(sizeof(char)*MAX_BUF);

 while(c != '\n')
  {
   if(i>MAX_BUF)
    ch=(char*)realloc(ch, i);
   c=fgetc(in);
   ch=c;
   i++;
  }
 return ch;
}

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#2

أخيرا وصلت غلى الحل و الحمد لله:

char *rline(FILE *in)
 {
  char c, *ch=NULL;
  int i=0;
  ch=(char*)malloc(sizeof(char)*MAX_BUF+1); // one byte for \0 caracter

  while((c=fgetc(in)) != EOF && c != '\n')
   {
    if(i>MAX_BUF) // if line more then our buffer, realloc memory in size of i, last byte for null terminitor
     ch=(char*)realloc(ch, sizeof(char) * (i+1));
    ch=c; // place the new car in ch buffer
    i++;
   }
  ch='\0'; //add null terminitor
  return ch;
 }

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

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