为什么在链表中使用字符串会出错?

Why using string in linked-list gives errors?

我做的程序问题不大

主要问题是当我尝试扫描字符串条目时,程序崩溃了。我不明白问题出在哪里,也不知道如何解决。整数部分工作正常,但字符串元素似乎有一些问题。

我该如何管理和解决该问题?我查了好几个主题还是没看懂,谁能帮我改一下代码的错误行?

#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 来达到这个目的。还要确保 data2data3 已正确初始化,您的代码有很多未初始化的变量。

strcpy(temp_node->source, data2);
strcpy(temp_node->destination, data3);

您读取字符串的方式:

scanf(" %s", &data2);
scanf(" %s", &data3);

有点不安全。您可以在格式说明符中指定长度,也可以避免 & 中有更多详细信息):

scanf(" %19s", data2);
scanf(" %19s", data3);

请注意 fflush(stdin) 是 UB,除非您确定编译器如何处理它,否则您可能需要考虑一下。

旁白:struct flight f[];您没有指定数组大小。