我制作的程序几乎没有问题。
主要问题是当我尝试扫描字符串条目时,程序崩溃。我不明白问题出在哪里,也不知道如何解决。整数部分工作正常,但字符串元素似乎存在一些问题。
我如何管理和解决该问题?我已经检查了几个有关此主题的主题,但是我仍然不明白,有人可以通过更改我的代码的错误行来向我展示吗?
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#pragma warning(disable:4996)
struct flight {
int number;
char source[20];
char destination[20];
struct flight* next;
};
void enter();
void display();
void delete();
int count();
typedef struct flight NODE;
NODE* head_node, * first_node, * temp_node = 0, * prev_node, next_node;
int data;
char data2[20], data3[20];
struct flight f[];
void enter()
{
printf("\nEnter flight number: \n");
scanf("%d", &data);
printf("\nEnter flight source: \n");
scanf(" %s", &data2);
printf("\nEnter flight destination: \n");
scanf(" %s", &data3);
temp_node = (NODE*)malloc(sizeof(NODE));
temp_node->number = data;
temp_node->source = data2[20];
temp_node->destination = data3[20];
if (first_node == 0)
{
first_node = temp_node;
}
else
{
head_node->next = temp_node;
}
temp_node->next = 0;
head_node = temp_node;
fflush(stdin);
}
这不是在C中复制字符串的方法:
temp_node->source = data2[20];
temp_node->destination = data3[20];
您可以为此目的使用strcpy
。还请确保strcpy
和data2
已正确初始化,您的代码中有很多未初始化的变量。]>
data3
您读取字符串的方式:
strcpy(temp_node->source, data2); strcpy(temp_node->destination, data3);
有点不安全。您可以在格式说明符中指定长度,也可以避免使用
scanf(" %s", &data2); scanf(" %s", &data3);
(在&
中有更多详细信息):
anastaciu's comment并且请注意,
scanf(" %19s", data2); scanf(" %19s", data3);
是UB,除非您确定编译器如何处理它,否则您可能要考虑一下。
旁边:fflush(stdin)
您未指定数组大小。