在C中搜索结构

时间:2015-03-03 05:54:13

标签: c arrays struct

void search(struct _data *BlackBox, char *name, int size) - 此功能 将获得传递给它的动态结构数组,我们正在寻找的名称 for,以及数组的大小。然后,此函数将搜索动态 名字的数组。

typedef struct _data
{
    char* name;
    long number;
} _data;

int scan(FILE *(*stream));
struct _data *load(FILE *stream, int size);
void search(struct _data *Blackbox, char *name, int size);

int main()
{
    int size = scan(&stream);    
    rewind(stream);
    _data *data = load(stream, size);

    char input;
    printf("Please Input Search Name: ");
    scanf("%s", input);
    while (input != NULL)
    {
        search(data, input, size);
    }
}

void search(struct _data *Blackbox, char *name, int size)
{
    for (int i=0; i<size; i++)
    {
        if (strcmp(name,Blackbox[i].name) != 0)
        {
            printf("Success");
        }
        else
        {
            printf("Name Not Found");
        }
    }
}

但我得到以下输出

Output:
LINES: 2
ron 7774013
jon 7774014
Please Input Search Name: ron

RUN FINISHED; Segmentation fault: 11; real time: 2s; user: 0ms; system: 0ms

3 个答案:

答案 0 :(得分:3)

在你的主要功能中你有“char input;”和“scanf(”%s“,输入);”。这是错误的,因为%s指定了一个字符串参数,但输入是一个char变量。因此,用户键入的内容存储在内存中的某个随机位置。

将输入声明更改为lime“char input [1000];”。你也必须对你的while循环做些什么。

答案 1 :(得分:0)

在尝试使用之前,您需要声明search函数。

编译器甚至应该警告你这个隐式声明。

答案 2 :(得分:0)

如果您遇到分段错误,则适用以下一项:

  1. Blackbox函数中的结构search未指向有效的内存位置,因此Blackbox[i]产生错误
  2. 结构的name成员未指向有效的内存位置,因此Blackbox[i].name正在产生错误
  3. Blackbox数组的大小小于size-1
  4. 要执行此操作,请使用调试器并检查Blackbox指向的位置。然后检查Blackbox.name指向的位置。然后,检查Blackbox阵列中是否有任何内容到size-1。我假设要么为空。可能是load函数赋值错误或size错误用法。