Неполная последовательность при использовании strcat () to с char, преобразованным в массив char в сжатии LZW - PullRequest
0 голосов
/ 30 октября 2019

У меня есть следующий код ниже. Однако он может успешно конвертировать файлы .txt в сжатые файлы LZW, когда я запускаю его на .jpg (что теоретически должно работать). Первый символ char / int, который он читает, это «255», затем strcat () пытается объединить k_str с wk во втором цикле, который теоретически должен быть «216 или \ 330». Wk_ptr == "\ 377", неполная последовательность \ 330. Я не уверен, в чем проблема.

Спасибо

void encode(FILE *in, FILE *out) {
    unsigned char w[ENTRYSIZE] = "";
    unsigned char *w_ptr = w;
    unsigned char wk[ENTRYSIZE] = "";
    unsigned char *wk_ptr;
    unsigned char k;
    unsigned char k_str[2];
    unsigned int c;
    unsigned int i;

    for (i = 0; i < ASCII; i++) {
        dict[i][1] = i;
        dict[i][0] = 1;
    }

    while ((c = fgetc(in)) != EOF) {
        k_str[0] = c;
        k_str[1] = '\0';
        w_ptr = w;
        strcpy(wk, w_ptr);
        strcat(wk, k_str);
        wk_ptr = wk;


        if (check_dict(wk_ptr, 0) == 1) {
            strcpy(w, wk_ptr);
        } else {
            write12(out, check_dict(w_ptr, 1));
            add_dict(wk_ptr);
            k_str[0] = c;
            k_str[1] = '\0';
            strcpy(w, k_str);
        }
    }
    write12(out, check_dict(w_ptr, 1));
    flush12(out);
    write12(out, check_dict(w_ptr, 1));
}
...