从用户输入的函数返回一个字符串

时间:2014-04-09 19:08:26

标签: c++ arrays string char output

我一直在网上搜索函数中返回一个字符串。

const char *func()
{
  const char *s1 = "hello";
  return s1;
}

如果您预定义字符串,则此方法有效。如何让用户输入字符串并返回该特定字符串

const char *func()
{
  char s1[313];
  cin >> s1;
  return s1;
}

我尝试了以上但它发出了警告

warning: address of stack memory associated with local variable
  's1' returned [-Wreturn-stack-address]
return s1;

3 个答案:

答案 0 :(得分:4)

一种简单的方法是使用std::string

#include <string>
#include <iostream>

std::string func()
{
  std::string s1;
  std::cin >> s1;
  return s1;
}

答案 1 :(得分:1)

&#34;正确&#34;在C ++中这样做的方法是使用std::string,正如juanchopanza所说,但仅仅是FYI,人们可以在没有std::string s的情况下通过类似的方式实现这一点:

char* func() {
  char* s1 = new char[313];    // allocate memory on the heap
  cin >> s1;
  return s1;
}

虽然这有规定要求来电者delete[]该功能的结果:

char* s = func();
// do stuff with s
delete[] s;  // must be called eventually

不过,在实际的C ++代码中不要这样做 - 使用std::string

答案 2 :(得分:1)

您可以在函数内部分配字符数组,也可以将数组作为参数传递给函数。

在第一种情况下,你可以使用标准类std :: string,或者你需要自己分配数组。

例如

std ::string func()
{
  std::string s1;
  cin >> s1;
  return s1;
}

char * func()
{
   const size_t N = 313;

   char *s1 = new char[N];
   cin.getline( s1, N );

   return s1;
}

在第二种情况下,该函数可以采用以下方式

char * func( char s1[], size_t n )
{
   cin.getline( s1, n );
   return s1;
}

在主要内容中可以称为

int main()
{
   const size_t N = 313;
   char s1[N];

   func( s1, N );
}