قضايا مؤشر مع البرنامج الأساسي ملف C I / O
-
21-08-2019 - |
سؤال
#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 [أنا])، تقوم بإرسال حرف، لا سلسلة.