将元素添加到链表?

时间:2013-10-15 20:12:13

标签: c struct linked-list

这是我的结构和方法,但它不起作用。任何人都可以帮我解决问题吗?感谢

这是struct:

    struct album
{
    char singerName[30];
    char year[4];
    char title[30];

    char songName[50];
    char songLength[50];
    struct album *next;
};
struct album *a=NULL;

这是方法:

struct album *addAlbum(struct album *list,char* year,char *title,char *singerName)
{
    struct album *temp;
    temp =(struct album*) malloc(sizeof(struct album));
    strcpy(temp->singerName,singerName);
    strcpy(temp->title,title);
    strcpy(temp->year,year);
    temp -> next = NULL;

    if(list==NULL)
    {
        return temp;
    }
    else
    {
   temp->next=list;
        return temp;
    }
}

1 个答案:

答案 0 :(得分:1)

目标缓冲区控制不足。

如果输入year为“2013”​​,则以下内容可能会失败。这是一个字符串,需要4 + 1个字节。

char year[4];     
...
strcpy(temp->year,year);

简单修复是使用char year[5]。但是这会把罐子拉到路上。

最好使用strncpy(temp->year,year, sizeof(temp->year)-1); temp->year[sizeof(temp->year)-1] = '\0'。存在其他选项以防止超限。