C中的动态结构

时间:2014-04-07 13:15:30

标签: c struct c-strings

我正在尝试读取输入的名称,将其保存在动态结构中,最后添加一个数字并计算它。我设法做了第一部分,但我似乎无法将结构地址传递给应该计数的函数,也不能使函数工作。

    struct ime_dadoteke
{
    unsigned char *ime;
    unsigned char velikost;
    //this is the struct im working with
};

这是主要的:

 struct ime_dadoteke *ime;
        ime = ime_init();
        int i=1;
        do
        {
            naslednje_ime(ime, i); /*here is the problem with passing the
                                       address. I also tried &ime with parameter
                                       struct ime_dodoteke **ptr. 
                                       I get error cannot convert argument 1
                                       from 'ime_dadoteke *' to 'ime_dodoteke *' */
            i++;
        } while (i <= st_korakov);

这是第一个有效的功能:

struct ime_dadoteke* ime_init()
{
    int i;
    struct ime_dadoteke *rtn = (struct ime_dadoteke*)malloc(sizeof(struct ime_dadoteke));
    printf_s("Vnesi ime slike.\n");
    rtn->ime =(unsigned char*)malloc(sizeof(unsigned char));
    for (i=0; rtn->ime[i-1]!=10; i++)
    {
        scanf("%c", &rtn->ime[i]);
        rtn->ime = (unsigned char*)realloc(rtn->ime, (i+2)*sizeof(unsigned char));

    };

    rtn->ime[i]='\0';
    rtn->velikost = i;
    fseek(stdin, 0, SEEK_END);
    return rtn;
};

这是函数的骨架,应该计算名称末尾的数字。我还没有构建它因为我遇到了问题:不允许指向不完整的类。

void naslednje_ime(struct ime_dodoteke *ptr, int i)
{
    struct ime_dadoteke *ime = ptr;
    ptr /*ptr is underlined (error) */->ime[ptr /*ptr is underlined (error) */->velikost - 1] = '0';

};

另请注意,我创建了大小为string的结构,因为strlen()并不想采用非const char。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

错误消息pointer to incomplete class is not allowed表示结构(您告诉我们引用错误消息的struct ime_dadoteke引用错误消息的成员)未在源代理单元{{{ 1}}已定义。您需要将结构定义放在头文件中,并将其包含在您使用它的任何位置,也可以放在您定义struct ime_dadoteke *ptr的文件中。