Ошибка ядра сегментации, выгруженная в C - исправлено, сжатие RLE - PullRequest
0 голосов
/ 30 мая 2018
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main (void)

{
    int count[256] = { 0 };
    int n;
    int p;
    FILE * fp;
    FILE * fptr;
    fp = fopen("financials.txt", "rt");
    fptr = fopen("compressed_financials.txt", "wt");

if (fp == NULL)
{
    printf("Error file doesn't exist");

}   

while((n=fgetc(fp)))
{
    if(n == EOF)
    {
        break;
    }   
    else
    count[n]+=1;
}


for (p=0; p < 256; p++)
{
    if(count[p] > 0)
    {
        fprintf(fptr, "%c%d", p, count[p]);
    }
}

fclose(fp);
fclose(fptr);
return 0;
}

Здравствуйте, когда я выполняю программу, я получаю ошибку сегментации (ядро сброшено).Что я сделал неправильно в моей логике программирования, которая вызывает это?Из того, что я могу понять, я мог неправильно использовать указатели, что приводит к доступу к памяти, которой не существует.Я пытаюсь реализовать сжатие RLE.

Мне удалось заставить его работать сейчас, сжатие RLE наполовину работает, но выдает неправильную структуру.Это символы во входном файле "AAAAAA333333FFFFF22222", но затем это сжатый вывод: "2536A6F5", вывод должен быть "6A635F52". Я думаю, что мне нужно реализовать больше проверки состояния, может кто-нибудь дать мне подсказки, что мне нужно добавитьв моем операторе if, чтобы он выводился правильно?

...