0

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

4 回答 4

6
char * strcpy ( char * destination, const char * source );

strcpy操作字符串,在 C 中用一个以 null 结尾的数组表示char,该数组的类型为char[]or char*

但是,在您的代码中:

struct albums
{
    char* title[MAX];
    ...
    char* singerName[MAX];
    ...
};

char* []表示 的数组char*,它是指向 的指针数组charalbums.title因此albums.singerName不是字符串,而是指针数组。您应该将其更改为char title[MAX]以获得字符串。

于 2013-10-15T07:20:17.120 回答
3

您正在定义指向 char 的指针数组,而不是 char 数组。改为使用。

char name[MAX];
于 2013-10-15T07:20:18.700 回答
0

重要的一点,zakinster 和 SioulSeuguh 已经回答了你的主要问题

使用 strncpy 代替 strcpy

strcpy 取决于尾随 \0。如果不存在,则说明缓冲区溢出问题。

于 2013-10-15T07:22:24.697 回答
0

您声明了指针数组。摆脱指针:

struct albums
{
    char title[MAX];
    int year;
    char singerName[MAX];
    songs *bas;
    songs *current;
    struct albums *next;
};
于 2013-10-15T07:23:21.397 回答