首页 > 解决方案 > 如何在没有指针的情况下将字符/字符串从子函数返回到主函数?

问题描述

您好,我仍然是 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();

标签: c++

解决方案


您正在查找的代码如下所示:

#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());这只会将指针复制到数据而不是指针指向的数据。

永远不应使用单独的指针来转移 C++ 中的所有权。 unique_ptr并且shared_ptr 应该使用

如果您真的想使用原始指针返回数据(这是一个非常糟糕的主意),您将不得不使用 new并且new[]因为这将在自由存储上分配空间,当函数到达其范围的末尾时该空间将保持可用。delete但是当程序以调用or结束时,它也使外部函数负责内存的释放delete[]


推荐阅读