【发布时间】:2021-04-28 14:08:52
【问题描述】:
我正在尝试向结构中的字符串添加多个字符串,当我到达“fgets”行时,程序就会崩溃/关闭。如果有人知道我的代码中存在什么问题,我将非常感激。 我正在调试代码,问题出在 "fgets" 行中的函数 "addReason" 中,但我不明白到底是什么问题。
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PRO_OP 1
#define CON_OP 2
#define PRINT_OP 3
#define EXIT_OP 4
#define STR_LEN 50
#define MAX_LIST_LENGTH 10
typedef struct reasonList
{
char* listName;
char* reasons[MAX_LIST_LENGTH];
int numReasons;
} reasonList;
void initList(reasonList* list, char* name);
void addReason(reasonList* list);
void printList(reasonList* list);
int menu(void);
void myFgets(char str[], int n);
void deleteList(reasonList* list);
int main(void)
{
char dillema[STR_LEN] = { 0 };
int op = 0;
reasonList proList;
initList(&proList, "PRO");
reasonList conList;
initList(&conList, "CON");
printf("What is your dillema?\n");
myFgets(dillema, STR_LEN);
while (op != EXIT_OP)
{
op = menu();
switch (op)
{
case(PRO_OP):
addReason(&proList);
break;
case(CON_OP):
addReason(&conList);
break;
case(PRINT_OP):
printf("Your dillema:\n");
printf("%s\n\n", dillema);
printList(&proList);
printList(&conList);
break;
case(EXIT_OP):
deleteList(&proList);
deleteList(&conList);
break;
}
}
printf("Good luck!\n");
getchar();
return 0;
}
/*
Function will add a reason to the list
input: the list to add to and its name
output: none
*/
void addReason(reasonList* list)
{
printf("Enter a resone to add to list %s:\n", list->listName);
fgets(list->reasons[list->numReasons], STR_LEN, stdin);
list->reasons[strcspn(list->reasons[list->numReasons], '\n')] = '\0';
list->numReasons++;
}
【问题讨论】:
-
欢迎来到 Stack Overflow。请阅读有关如何创建 MCVE(Minimal, Complete, Verifiable Example — 或 MRE 或 SO 现在使用的任何名称)或 SSCCE(Short, Self-Contained, Correct Example) — 相同的想法但名称不同的信息。你展示了很多不相关的代码。
标签: c