你好,我还是C ++或编码方面的初学者。所以我的讲师没有教我们有关指针的知识。
所以我搜索互联网,您将需要使用char*
进行呼叫。因为我无法使用char*
,所以我只能使用char name();
char* name();// example for char* I want without *
char*name(){
char name[50];
cout<<"name:";
cin.getline(name,50);
return name;
}
int main(){
char staff[50];
strcpy(staff,name());
cout<<"name:"<<staff;
return 0;
}
如何在不使用name
且不使用char*
的情况下将char();
返回到主函数(请注意,我可以使用引用,但我也不知道char是否也可以使用它)。
预先感谢
答案 0 :(得分:3)
您要查找的代码如下:
#include <iostream>
#include <string>
std::string name();
int main() {
std::string staff;
staff = name();
std::cout << "name:" << staff << std::endl;
return 0;
}
std::string name() {
std::string aName;
std::cout << "name: ";
std::getline(std::cin, aName);
return aName;
}
std::string
是一个类,用于管理存储字符数据的缓冲区的分配,访问和释放。内部具有指向数据的指针。如果您希望将指向的数据保留在原位,则可以轻松地对该对象进行值复制甚至移动。
这些移动语义看起来像:staff = std::move(name());
这只会将指针复制到数据,而不会复制指针指向的数据。
Individual pointers should never be used to transfer ownership in C++. unique_ptr
和shared_ptr
should be used。
如果您真的想使用原始指针(即really bad idea)返回数据,则将have to use new
和new[]
,因为这将在免费存储,当该功能到达其作用域的末尾时将保持可用。但是,当程序以对delete
或delete[]
的调用结束时,它也使外部函数负责内存的重新分配。
答案 1 :(得分:0)
由于不允许您使用std::string
,并且想返回char *
,因此您可以执行以下操作:
auto name() {
char* p = new char[50]{};
std::cin.getline(p, 50);
return p;
}
int main() {
auto n = name();
std::printf("%s\n", n);
delete[] n; // now you're responsible to free this
}