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

问题描述 投票:0回答:1

我制作的程序几乎没有问题。

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

我如何管理和解决该问题?我已经检查了几个有关此主题的主题,但是我仍然不明白,有人可以通过更改我的代码的错误行来向我展示吗?

#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 string struct linked-list scanf
1个回答
1
投票

这不是在C中复制字符串的方法:

temp_node->source = data2[20];
temp_node->destination = data3[20];

您可以为此目的使用strcpy。还请确保strcpydata2已正确初始化,您的代码中有很多未初始化的变量。]​​>

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)您未指定数组大小。

© www.soinside.com 2019 - 2024. All rights reserved.