我正在使用一段C ++代码,该代码从txt
文件读取行,然后将每一行分配给名为array
的lines
。然后,它调用一个函数,该函数将lines
数组中的每个元素转换为char array
,然后返回结果char array
。这是我坚持的地方。如何从函数char array
返回一个toChar
并将返回的数组分配给另一个array
,以便可以根据需要使用它? (其余代码应使用每个返回的char array
将其写入管道中,这现在并不重要,而只是为了阐明为什么我需要学习从函数返回数组)
这是我正在使用的代码:
#include <fstream>
#include <iostream>
#include <string.h>
#include <unistd.h>
#include <cstdlib>
using namespace std;
char * toChar(string line);
int main()
{
string lines[0] = "line1";
char* a = toChar(lines[0]);
return 0;
}
char * toChar(string line)
{
char a[1024];
strcpy(a, line.c_str());
return a;
}
请注意,在这段代码中,我试图缩小代码,所以我为数组分配了一个简单的
string
值当我尝试编译此代码时,出现以下错误:
警告:返回了本地变量“ a”的地址
任何帮助或建议,我们将不胜感激。
最佳答案
首先使用const &
将字符串传递给函数,以避免不必要的复制,并能够使用临时变量,例如toChar("I am temp");
有以下几种选择:
(1)返回std :: string
std::string toChar(std::string const & line)
{
char a[1024];
strcpy(a, line.c_str());
return a;
}
当然,假定
line
小于1024个字符,且终止符为空(2)返回分配的数组
char * toChar(std::string const & line)
{
char * a = new char[1024];
strcpy(a, line.c_str());
return a;
}
但是您将必须对其进行实际管理并在以后将其删除。
(3)分配数组并将其传递给函数
void toChar(string const & line, char a[])
{
strcpy(a, line.c_str());
}
我想您实际上是想从std :: string或其中的一部分提取C字符串。正确的方法是(3)。
关于c++ - 从传递参数的函数返回char数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34199126/