我正在为学校做一个评论,我在编写一个创建新结构并返回指向它的指针的函数时遇到了问题。
// 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;
而发生的。任何帮助都值得赞赏。
答案 0 :(得分:3)
没错,你不能使用赋值运算符复制数组。
尝试使用strcpy(newBook.title, title)
或具有最大长度的变体。
strcpy
位于<string.h>
或<cstring>
。
答案 1 :(得分:0)
* title的类型为char。您正在尝试将其分配给char数组。因此错误。
您无法使用赋值运算符指定数组。您需要执行副本。例如:
strcpy(newbook.title, title);
很难知道为什么要避开C ++标准字符串容器并为字符串使用C结构。
您的代码存在更多问题。其中最重要的是从函数中返回局部变量的地址。取消引用该指针会调用未定义的行为,并且不会有任何好处。事情就是需要动态分配。
您的参数应该是const char *而不是char *。使用后者会使const和字符串传递给你的函数不方便。