为什么在链表中使用字符串会出错?
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
来达到这个目的。还要确保 data2
和 data3
已正确初始化,您的代码有很多未初始化的变量。
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[];
您没有指定数组大小。
我做的程序问题不大
主要问题是当我尝试扫描字符串条目时,程序崩溃了。我不明白问题出在哪里,也不知道如何解决。整数部分工作正常,但字符串元素似乎有一些问题。
我该如何管理和解决该问题?我查了好几个主题还是没看懂,谁能帮我改一下代码的错误行?
#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
来达到这个目的。还要确保 data2
和 data3
已正确初始化,您的代码有很多未初始化的变量。
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[];
您没有指定数组大小。