0

ここに私のコードがあります

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct node {
    char courseID[6];
    int section;
    int credits;
    struct node *link;
};

int main(void)
{
    int run=1;
    char coursetemp[6];
    int option, num, num2;
    struct node *ptr;
    void add(struct node **, int, int, char[]);
    void display(struct node *);
    void del(struct node *, int);

    ptr = NULL;
    while (run==1)
    {
        printf("Main Menu\n 1. Add Course\n2.Delete Course\n3. Display Enrolled courses\n");
        scanf("%d", &option);
        if (option == 1)
        {
            printf("Please enter the course ID\n");
            scanf("%s", coursetemp);
            printf("Please enter the course section, and amount of credits it's worth\n");
            scanf("%d %d", &num, &num2);
            add(&ptr, num, num2, coursetemp);
            display(ptr);
        }
        if (option == 2)
        {
            printf("Enter the element to delete\n");
            scanf("%d", &num);
            del(ptr, num);
        }
        if (option == 3)
        {
            display(ptr);
        }
        else
        {
            //printf("Please enter a proper selection\n");
        }   //end of while
    }
    return 0;
}  
void display(struct node *pt)
{
    while (pt != NULL)
    {
        printf("%s %d %d\n", pt->courseID, pt->section, pt->credits);
        pt = pt->link;
    }
}

コース名が文字だけである限り、これは意図したとおりに機能します。しかし、文字と数字で試してみるとすぐに。CIS444 ランダムな ASCII 文字が大量に表示されます。簡単な修正のように感じますが、方法を思い出せません

4

1 に答える 1

1

6 文字以上のコース ID を入力していると思われます。メンバーはcourseID、最後に null ターミネータが付いた 5 文字の ID のみを保持できます。たとえば、6 文字のコース ID を入力した場合、7 バイトがコピーされcourseID、構造の配置に応じて、構造内の次のメンバーの一部が上書きされます。また、この場合、変数coursetempは最後を超えて書き込まれることにも注意してください (未定義の動作が発生します)。

于 2013-03-28T20:57:28.227 に答える