将结构值传递给函数

时间:2011-01-17 12:13:25

标签: c

#include<stdio.h>

struct classifier
{
    char src_address[15];
    char dst_address[15];
    int src_port;
    int  dst_port;
};

void display(struct classifier *ptr)
{
    printf("\n%s", ptr->src_address );
    printf("\n%s", ptr->dst_address );
    printf("\n%d", ptr->src_port);
    printf("\n%d", ptr->dst_port );
}

main()
{
    int i;
    struct classifier *ptr[4];
    for(i=0;i<2;i++)
    {
        scanf("%s",ptr[i]->src_address);
        scanf("%s",ptr[i]->dst_address);
        scanf("%d",&ptr[i]->src_port);
        scanf("%d",&ptr[i]->dst_port);
        display(ptr[i]);
    }
    return 0;
}

我想在一个函数中显示输出。当我第一次输入数据时,我得到了正确的显示。当我第二次输入数据时,它会显示分段错误。代码有什么问题?根据我的知识,我已经正确地宣布了指针。请帮忙。

4 个答案:

答案 0 :(得分:4)

你需要一个像

这样的结构数组
  

struct classifier ptr [4];

答案 1 :(得分:4)

你刚刚声明了指针,但它们没有指向任何有效的指针。您需要为每个结构分配内存并将对象的内存位置存储在数组中。

编辑:仅当您真的想要动态分配内存时才有效。否则使用@ckv

建议的方法

答案 2 :(得分:3)

struct classifier *ptr[4];

在上面的定义中,ptr是一个类型为struct classifier的指针的数组(大小为4)。 您没有为这些指针分配内存,指针变量ptr[0..3]指向垃圾

相反,您应该mallocing内存或使用

struct classifier ptr[4];

这将确保ptr指向在堆栈上分配的有效struct classifier变量

答案 3 :(得分:3)

您尚未为struct classifier

分配内存

你要么想要这个,

struct classifier *ptr = (classifier*)malloc(4)

接着,

free(ptr);

struct classifier ptr[4];