我在练习中被困了几个小时,我必须使用函数在结构中构建一个数组并打印它。在我当前的程序中,它会编译但在运行时崩溃。
#define LIM 10
typedef char letters[LIM];
typedef struct {
int counter;
letters words[LIM];
} foo;
int main(int argc, char **argv){
foo apara;
structtest(apara, LIM);
print_struct(apara);
}
int structtest(foo *p, int limit){
p->counter = 0;
int i =0;
for(i; i< limit ;i++){
strcpy(p->words[p->counter], "x");
//only filling arrays with 'x' as an example
p->counter ++;
}
return;
我确实认为这是由于我的错误使用/指针组合造成的。我试过调整它们,但是产生了“不兼容类型”错误,或者数组看似空白
}
void print_struct(foo p){
printf(p.words);
}
我还没有成功进入print_struct阶段,但我不确定p.words是否是正确的调用项目。在输出中,我希望函数返回一个x的数组。 如果我做了某种严重的“我应该已经知道这个”C错误,我会提前道歉。谢谢你的帮助。
答案 0 :(得分:1)
structest()的第一个参数被声明为foo类型的指针。
int structtest(foo *p, int limit)
在main中,你没有传递指向foo变量的指针,你只是传递一个foo变量。
structtest(apara, LIM);
尝试将指针传递给foo变量,如下所示:
structtest(&apara, LIM);
答案 1 :(得分:0)
void print_struct(foo p){
printf(p.words);
}
我还没有成功进入print_struct阶段,但我是 不确定p.words是否是要调用的正确项目。在里面 输出,我希望函数返回一个x的数组。一世 如果我犯了某种严重的“我应该这样做”,请提前道歉 已经知道这个“C错误。谢谢你的帮助。
您无法将数组发送到printf,就像使用其他语言打印数组一样。你必须自己做循环:
void print_struct(foo paragraph)
{
printf("counter: %d\n",paragraph.counter);
for (int i = 0; i < paragraph.counter; i++)
{
printf("words[%d] %s\n",i,paragraph.words[i]);
}
}
您应该将main()函数移动到源代码的底部。或者,您必须为main下面定义的任何代码添加函数原型:
int structtest(foo *p, int limit);
....
main()
{
...
}
int structtest(foo *p, int limit)
{
...
}