fgets在函数崩溃中使用struct指针

时间:2016-12-16 07:57:32

标签: c pointers struct

我无法在c程序的函数内部通过pointer获取结构fgets的结构getInput();我不确定我做错了什么。 *stu->name = (char*)malloc(N_LENGTH); 函数是崩溃发生的地方。我首先尝试将内存分配给名称将存储在哪里

fgets(*stu->name, N_LENGTH, stdin);

然后通过

获取用户的输入
#include <stdio.h>
#include <stdlib.h>

#define UNIT 100
#define HOUSE 1000
#define THRESH 12
#define DISCOUNT 10
#define NUM_PERSONS 5
#define N_LENGTH 30


struct student
{
    char *name;
    char campus;
    int userUnit;
};

void getInput(struct student *stu);
int amountCalc(struct student *stu);
void printOutput(struct student stu, int total);

int main()
{
    int total[NUM_PERSONS];
    int averageTotal=0;
    struct student tempStudent;
    struct student students[NUM_PERSONS];
    struct student *sPtr = &tempStudent;
    int i;
    for (i=0; i < NUM_PERSONS; i++)
    {
        getInput(sPtr);
        students[i]=tempStudent;
        total[i]=amountCalc(sPtr);
        averageTotal+=total[i];
    };

    for (i=0; i < NUM_PERSONS; i++)
    {
        printOutput(students[i], total[i]);
    };

    printf("\nThe average tuition cost for these %d students is $%.2f.\n",
            NUM_PERSONS, averageTotal/(NUM_PERSONS*1.0));
    return 0;
}

void getInput(struct student *stu)
{
        fflush(stdin);
        printf("Enter student name: ");
        *stu->name = (char*)malloc(N_LENGTH);
        fgets(*stu->name, N_LENGTH, stdin);

        printf("Enter y if student lives on campus, n otherwise: ");
        scanf(" %s", &stu->campus);

        printf("Enter current unit count: ");
        scanf(" %d", &stu->userUnit);

        printf("\n");
}

int amountCalc(struct student *stu)
{
        int total;
        total=(stu->userUnit)*UNIT;

        if (stu->userUnit>THRESH) {
            total-=((stu->userUnit)-12)*DISCOUNT;
        };

        if (stu->campus=='y') {
            total+=HOUSE;
        };
        return total;
}

void printOutput(struct student stu, int total)
{
    printf("\nStudent name: %s\n", stu.name);
    printf("Amount due: $%d\n\n", total);
}

程序在第一行和第二行崩溃。

很抱歉,如果我违反任何规则,因为这是我第一次访问该网站。

代码:

var arr = $('input[name=id_cot]').map(function() {
  return this.value;
}).get();
console.log(arr)

2 个答案:

答案 0 :(得分:1)

您的分配错误。真正的分配是这样的;

void getInput(struct student *stu)
{
    fflush(stdin);
    printf("Enter student name: ");
    stu->name = (char*)malloc(N_LENGTH);
    fgets(stu->name, N_LENGTH, stdin);

    printf("Enter y if student lives on campus, n otherwise: ");
    scanf(" %s", &stu->campus);

    printf("Enter current unit count: ");
    scanf(" %d", &stu->userUnit);

    printf("\n");
}

编译时,您可以看到警告。你应该处理所有的警告。并且将malloc转换为(char *)也是不必要的。

答案 1 :(得分:-1)

请勿使用fflush(stdin)See this question.我不知道是否会导致错误但是它没有在C标准中定义,所以也许你的平台无法处理它!

错误的记忆分配也是一个问题,请看@HakkıIşık的回答。