الدرس 50: إدخال وإخراج الملفات الجزء 4: إدخال وإخراج السلاسل النصية (fputs, fgets)
تتعامل هذه الدوال مع قراءة وكتابة أسطر كاملة أو سلاسل نصية في الملفات.
كتابة سلسلة نصية: fputs()
تكتب سلسلة نصية تنتهي بحرف الصفر في تدفق الملف المحدد. ملاحظة هامة: دالة fputs لا تكتب حرف السطر الجديد (\n) تلقائياً. يجب عليك إضافته يدوياً.
القاعدة: int fputs(const char *str, FILE *stream);
c FILE *fp = fopen("log.txt", "a"); // نمط الإضافة
if (fp != NULL) { fputs("هذا هو السطر الأول.", fp); fputs("\n", fp); // سطر جديد يدوي fputs("هذا هو السطر الثاني.\n", fp); fclose(fp); }
قراءة سلسلة نصية (سطر): fgets()
تقرأ سلسلة نصية (حتى طول محدد) من التدفق حتى يتم العثور على حرف سطر جديد، أو الوصول لنهاية الملف، أو الوصول للحد الأقصى للحجم. وهي تتضمن حرف السطر الجديد إذا وُجد.
القاعدة: char *fgets(char *str, int n, FILE *stream);
str: مخزن (buffer) لتخزين السلسلة المقروءة.n: الحد الأقصى لعدد الأحرف المراد قراءتها (حجم الـ buffer).stream: تدفق الملف.
c char buffer[100]; FILE *fp = fopen("log.txt", "r");
if (fp != NULL) { // تقرأ حتى 99 حرفاً + \0 while (fgets(buffer, sizeof(buffer), fp) != NULL) { printf("تمت قراءة: %s", buffer); } fclose(fp); }
ملاحظة: تعتبر fgets بشكل عام أكثر أماناً من fscanf لقراءة السلاسل النصية لأنها تمنع تجاوز سعة التخزين المؤقت عن طريق تحديد حجم المدخلات.