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
答案 0 :(得分:3)
在你的主要功能中你有“char input;”和“scanf(”%s“,输入);”。这是错误的,因为%s指定了一个字符串参数,但输入是一个char变量。因此,用户键入的内容存储在内存中的某个随机位置。
将输入声明更改为lime“char input [1000];”。你也必须对你的while循环做些什么。
答案 1 :(得分:0)
在尝试使用之前,您需要声明search
函数。
编译器甚至应该警告你这个隐式声明。
答案 2 :(得分:0)
如果您遇到分段错误,则适用以下一项:
Blackbox
函数中的结构search
未指向有效的内存位置,因此Blackbox[i]
产生错误name
成员未指向有效的内存位置,因此Blackbox[i].name
正在产生错误Blackbox
数组的大小小于size-1
。 要执行此操作,请使用调试器并检查Blackbox
指向的位置。然后检查Blackbox.name
指向的位置。然后,检查Blackbox
阵列中是否有任何内容到size-1
。我假设要么为空。可能是load
函数赋值错误或size
错误用法。