Я получаю подозрительное преобразование указателя в функции main. Как от этого избавиться?

Я новичок в stackoverflow. Название - это мой вопрос. Может ли кто-нибудь помочь мне в этом. Спасибо. Я работал над этим около 3 дней.

Эта часть кода кодирует файл в код Хаффмана.

void encode(const char *s, char *out)
{
    while (*s) {
        strcpy(out, code[*s]);
        out += strlen(code[*s++]);
    }
}    

Эта часть кода расшифровывает файл от кода Хаффмана до кода, удобочитаемого человеком.

void decode(const char *s, node t)
{
    node n = t;
    while (*s) {
        if (*s++ == '0') n = n->left;
        else n = n->right;

        if (n->c) putchar(n->c), n = t;
    }

    putchar('\n');
    if (t != n) printf("garbage input\n");
}

В этой части я получаю свою ошибку.

int main(void)
{
    int i;
    const char *str = "this is an example for huffman encoding", buf[1024];

    init(str);
    for (i=0;i<128;i++)
        if (code[i]) printf("'%c': %s\n", i, code[i]);

    encode(str, buf); /* I get the error here */
    printf("encoded: %s\n", buf);

    printf("decoded: ");
    decode(buf, q[1]);

    return 0;
}

person Cronas De Se    schedule 04.01.2014    source источник


Ответы (2)


Объявите buf в другой строке, а не как const:

char buf [1024];

person barak manos    schedule 04.01.2014

const применяется ко всем объявлениям в строке, поэтому вы объявляете buf как const char[1024]. Это означает, что вызов encode отбрасывает константность, что приводит к предупреждению.

Избегайте размещения нескольких объявлений переменных в одной строке, если все они не в точности одного типа.

person Sneftel    schedule 04.01.2014