在 C 中搜索结构

search a struct in C

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

您需要先声明 search 函数,然后再尝试使用它。

编译器甚至应该就该隐式声明向您发出警告。

在您的主函数中,您有 "char input;" 和 "scanf("%s",input);"。这是错误的,因为 %s 指定了一个字符串参数,但输入是一个 char 变量。因此,用户输入的任何内容都会存储在内存中的某个随机位置。

将输入声明更改为石灰 "char input[1000];"。而且您还必须对 while 循环做一些事情。

如果出现分段错误,则适用以下情况之一:

  1. search 函数中的结构 Blackbox 未指向有效的内存位置,因此 Blackbox[i] 产生错误
  2. 结构的 name 成员未指向有效的内存位置,因此 Blackbox[i].name 产生错误
  3. Blackbox 数组的大小小于 size-1

为此,请使用调试器并检查 Blackbox 指向的位置。然后检查 Blackbox.name 指向的位置。然后,检查 Blackbox 数组是否有直到 size-1 的任何内容。我假设两者都为空。可能是 load 函数的赋值错误或 size 的错误使用。