我在函数main中得到了一个可疑的指针转换。如何摆脱这个?

时间:2014-01-04 11:07:25

标签: turbo-c

我是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;
}

2 个答案:

答案 0 :(得分:1)

在另一行中声明'buf',而不是'const':

char buf [1024];

答案 1 :(得分:1)

const适用于该行的所有声明,因此您将buf声明为const char[1024]。这意味着调用encode会抛弃常量,从而产生警告。

避免在同一行上有多个变量声明,除非它们都完全相同的类型。