我一直在网上搜索函数中返回一个字符串。
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;
答案 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 );
}