0

我在一个练习中被难住了几个小时,我必须使用函数在结构内建立一个数组并打印它。在我当前的程序中,它编译但在运行时崩溃。

#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 错误,我提前道歉。谢谢你的帮助。

4

2 回答 2

1

structest() 的第一个参数被声明为 foo 类型的指针。

int structtest(foo *p, int limit)

在 main 中,您没有传递指向 foo 变量的指针,而只是传递了 foo 变量。

structtest(apara, LIM);

尝试将指针传递给 foo 变量,如下所示:

structtest(&apara, LIM);
于 2012-09-22T03:23:33.347 回答
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 下方、main 上方的任何代码添加函数原型:

int structtest(foo *p, int limit);
....
main()
{
...
}
int structtest(foo *p, int limit)
{
...
}
于 2012-09-22T03:33:37.187 回答