我正在使用一段C ++代码,该代码从txt文件读取行,然后将每一行分配给名为arraylines。然后,它调用一个函数,该函数将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/

10-11 22:45
查看更多