间接错误的级别

时间:2014-06-17 12:00:58

标签: c

我尝试创建将输入存储到结构化数组中的代码,每次执行fgets时都会分配内存。这是我到目前为止所做的:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct listings{
    int index;
    char *text;
};

int main(){
    int len;
    int i;
    int indexnum;
    char input[255];
    struct listings *p;
    char *q, *r;
    indexnum = 0;
    q = &input[255];
    //p = &listing[indexnum].text;

    for(;;){
        printf("Input a Word: \n");
        q = fgets(input, 255, stdin);
        printf("word: %s", q);
        if(q != NULL){
            len = strlen(input);
            p = (struct listings *) calloc(1,sizeof(char)*(len+1));
            p->text[indexnum] = q; //Error here

            printf("listing: %s\n", p->text[indexnum]);
            indexnum++;
        }
    }
}

当我运行此代码时(只是为了查看我是否在正确的轨道上),它在行上显示错误

p->text[indexnum] = q;

说: warning C4047 'char' differs in levels of indirection from 'char *'

我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

p->text[indexnum]是一个字符,而不是字符串。

我不确定你要做什么。你想要一个字符串数组吗?如果是,则必须将text声明为char**,先分配数组(malloc(sizeof(char*) * ARRAY_SIZE)),然后在其中分配每个字符串。

如果您只想使用text填充q,请使用字符串函数,例如strcpy

答案 1 :(得分:1)

p->text[indexnum] = q;

p->text[indexnum]的类型为char,但您要为其分配char *q的类型)。

您在此处遇到同样的问题:

 printf("listing: %s\n", p->text[indexnum]);

s需要char *参数,p->text[indexnum]类型为char

答案 2 :(得分:0)

int main(){
    int len;
    int i;
    int indexnum;
    char input[255];
    struct listings p[16];
    char *q, *r;
    indexnum = 0;

    for(;;){
        printf("Input a Word: \n");
        q = fgets(input, sizeof input, stdin);
        if(q != NULL){
            printf("word: %s\n", q);
            len = strlen(input);
            p[indexnum].text = malloc(len+1);
            strcpy(p[indexnum].text, q);

            printf("listing: %s\n", p[indexnum].text);
            ++indexnum;
        } else {
            break;
        }
    }
    for(i=0;i<indexnum;++i){
        printf("%s", p[i].text);
        free(p[i].text);
    }
    return 0;
}