在 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 循环做一些事情。
如果出现分段错误,则适用以下情况之一:
search
函数中的结构 Blackbox
未指向有效的内存位置,因此 Blackbox[i]
产生错误
- 结构的
name
成员未指向有效的内存位置,因此 Blackbox[i].name
产生错误
Blackbox
数组的大小小于 size-1
。
为此,请使用调试器并检查 Blackbox
指向的位置。然后检查 Blackbox.name
指向的位置。然后,检查 Blackbox
数组是否有直到 size-1
的任何内容。我假设两者都为空。可能是 load
函数的赋值错误或 size
的错误使用。
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 循环做一些事情。
如果出现分段错误,则适用以下情况之一:
search
函数中的结构Blackbox
未指向有效的内存位置,因此Blackbox[i]
产生错误- 结构的
name
成员未指向有效的内存位置,因此Blackbox[i].name
产生错误 Blackbox
数组的大小小于size-1
。
为此,请使用调试器并检查 Blackbox
指向的位置。然后检查 Blackbox.name
指向的位置。然后,检查 Blackbox
数组是否有直到 size-1
的任何内容。我假设两者都为空。可能是 load
函数的赋值错误或 size
的错误使用。