سؤال

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

int main() 
{
     FILE *fp = fopen("lr.txt", "r");
     fseek(fp, 0L, SEEK_END);
     int size = ftell(fp);
     fseek(fp, 0L, SEEK_SET);

     char *lorem_ipsum;

     int i = 0;
     lorem_ipsum = (char*) malloc(sizeof(char) * size);
     while(fscanf(fp, "%s\n", lorem_ipsum) != EOF)
     {
      printf("%s", lorem_ipsum[i]);
      i++;

     }
     fclose(fp);
     return 0;
}

وهذا البرنامج بتجميع وركض، ولكن ما حدث هو أنني حصلت على segfault وأنا لا أعرف بالضبط تماما ما هو الخطأ في هذا البرنامج. يمكن لأي شخص أن يساعدني مع الخطأ مؤشر حصلت؟

هل كانت مفيدة؟

المحلول

وأنت تحاول طباعة lorem_ipsum[i] كما لو كانت سلسلة. lorem_ipsum هو سلسلة، لذلك lorem_ipsum[i] هو مجرد شخصية.

ووsegfault يحدث بسبب printf ينظر إلى قيمة الحرف في lorem_ipsum[i] ويفسر على أنه حرف * مؤشر (سلسلة). وبطبيعة الحال، فإن قيمة الطابع لا يتطابق مع عنوان ذاكرة صالح، المخصصة.

نصائح أخرى

أنت تمرير char (lorem_ipsum[i]) إلى وظيفة fscanf، التي يتوقع char* كوسيطة.

وقد ترغب في استخدام lorem_ipsum أو lorem_ipsum+i إذا كنت تريد حقا لتجريد الشخصيات i الأولى خارج.

هل يمكن ان توضح ما نحاول القيام به في لحلقة؟

ويبدو لي أن تحاول قراءة خط ملف سطرا ثم طباعة الخط. ومع ذلك، عند قيام printf ( "٪ ق"، lorem_ipsum [أنا])، تقوم بإرسال حرف، لا سلسلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top