将'char'赋值给'char [100]'的不兼容类型

时间:2013-12-15 02:25:00

标签: c++ pointers

我正在为学校做一个评论,我在编写一个创建新结构并返回指向它的指针的函数时遇到了问题。

// Review program

#include <iostream>
#include <stdlib.h>
#include <string>
#include <stdio.h>

using namespace std;
Book * makeBook(char * title, char * authorFName, char * authorLName, int numOfPages);

struct PersonName {
    char first[50];
    char last[50];
};
struct Book {
    char title[100];
    PersonName author;
    int numOfPages;
};

int main()
{
    char test[100] = "Hello, world";
    cout << test << endl;
    return 0;
}
Book * makeBook(char * title, char * authorFName, char * authorLName, int numOfPages)
{
    Book newBook;
    newBook.title = *title;

    Book* pBook = &newBook;
    return pBook;
}

标题中的错误是由于newBook.title = *title;而发生的。任何帮助都值得赞赏。

2 个答案:

答案 0 :(得分:3)

没错,你不能使用赋值运算符复制数组。

尝试使用strcpy(newBook.title, title)或具有最大长度的变体。

{p> strcpy位于<string.h><cstring>

答案 1 :(得分:0)

* title的类型为char。您正在尝试将其分配给char数组。因此错误。

您无法使用赋值运算符指定数组。您需要执行副本。例如:

strcpy(newbook.title, title);

很难知道为什么要避开C ++标准字符串容器并为字符串使用C结构。

您的代码存在更多问题。其中最重要的是从函数中返回局部变量的地址。取消引用该指针会调用未定义的行为,并且不会有任何好处。事情就是需要动态分配。

您的参数应该是const char *而不是char *。使用后者会使const和字符串传递给你的函数不方便。