C中的Strcpy不兼容指针类型

时间:2013-10-15 07:17:16

标签: c

您在下面看到的这段代码是我项目的一部分。当我编译这段代码时,我得到错误。错误是“从不兼容的指针类型传递'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");
    }

4 个答案:

答案 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.titlealbums.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;
};