我尝试创建将输入存储到结构化数组中的代码,每次执行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 *'
我在这里做错了什么?
答案 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;
}