如何在没有指针的情况下从子函数返回char / string到主函数?

时间:2019-05-20 14:02:53

标签: c++

你好,我还是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是否也可以使用它)。 预先感谢

2 个答案:

答案 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_ptrshared_ptr should be used

如果您真的想使用原始指针(即really bad idea)返回数据,则将have to use newnew[],因为这将在免费存储,当该功能到达其作用域的末尾时将保持可用。但是,当程序以对deletedelete[]的调用结束时,它也使外部函数负责内存的重新分配。

答案 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
}