2013-10-15 76 views
0

这是我的结构和方法,但它不起作用。任何人都可以帮我解决问题吗?感谢将元素添加到链接列表?

这是结构:

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; 
    } 
} 
+0

作业时间(再次)。请提供编译和演示问题的代码 –

+0

如果您自己无法完成作业,您是否至少可以指出编译器如何说明问题的性质和位置? –

+0

欢迎来到Stack Overflow。请尽快填写[关于]页面。你一年只分配了4个字符;这应该是5以允许4位数年份。可以说,你应该对你分配的结构成员进行长度检查。你可以通过使用'temp-> next = list;'来简化代码,如果没有条件(如果list是NULL,它将是正确的,如果不是则它将是正确的),那么'return temp;'。什么方式不起作用?调用这个函数的代码是什么样的? –

回答

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'。存在其他选项来防止溢出。