您在下面看到的这段代码是我项目的一部分。当我编译这段代码时,我得到错误。错误是“从不兼容的指针类型传递'strcpy'的参数1”和期望的'char '但参数的类型为'char * '。怎么能我修好了吗?谢谢。
struct songs
{
char name[MAX];
double length;
struct songs *next;
};
typedef struct songs songs;
struct albums
{
char title[MAX];
int year;
char singerName[MAX];
songs *bas;
songs *current;
struct albums *next;
};
void add(char albumTitle[],char singerName[], int releaseYear )
{
struct albums *temp;
temp=(struct albums *)malloc(sizeof(struct albums));
strcpy( temp->title, albumTitle ); /* ERROR */
temp->year=releaseYear;
strcpy( temp->singerName, singerName ); /* ERROR */
if (head== NULL)
{
curr=head=temp;
head->next=NULL;
curr->next=NULL;
}
else
{
curr->next=temp;
curr=temp;
}
printf("Done\n");
}
答案 0 :(得分:4)
char * strcpy ( char * destination, const char * source );
strcpy
操纵字符串,在C中用a null-terminated array of char
表示,其类型为char[]
或char*
。
但是,在您的代码中:
struct albums
{
char* title[MAX];
...
char* singerName[MAX];
...
};
char* []
表示char*
的数组,它是指向char
的指针数组。 albums.title
和albums.singerName
因此不是字符串,而是指针数组。您应该将其更改为char title[MAX]
以获得字符串。
答案 1 :(得分:2)
您正在定义指向char的指针数组,而不是char数组。 改用。
char name[MAX];
答案 2 :(得分:0)
重要说明,zakinster和SioulSeuguh回答了你的主要问题。
使用strncpy而不是strcpy
strcpy取决于尾随\ 0。如果不存在,则会出现缓冲区溢出问题。
答案 3 :(得分:0)
您声明了指针数组。摆脱指针:
struct albums
{
char title[MAX];
int year;
char singerName[MAX];
songs *bas;
songs *current;
struct albums *next;
};