如何从C ++中的函数返回char *

时间:2013-12-26 06:24:03

标签: c++ pointers

我在c ++中有以下功能

    char* Test::convertToSHA(const char* cc) {

    const char* salt ="sh$^$#@!&7hbfvatfacv@@@@bagg=shjgvshvcbschj";
    time_t currentTime;
    time(&currentTime);
    CCString startTimeString;
    startTimeString.createWithFormat("%d", currentTime);

    std::string s = cc;
    s += startTimeString.getCString();
    s += salt;

    char *str = new char[strlen(s.c_str()) +  1];
    int length=strlen(str);
    unsigned char hash[length*2];
    char hexstring[41];
    sha1::calc(str,length,hash);
    sha1::toHexString(hash, hexstring);

    return hexstring;
}

在我使用的电话中

char* output=NULL;
output= Test::convertToSHA("hello");

这导致我的代码崩溃。我回来一个字符串有问题吗?我怎么能从这个功能回来?

2 个答案:

答案 0 :(得分:5)

You can never return a local pointer in C or C++.而是将指针作为参数传递:

void Test::convertToSHA(const char* cc, const char* hexstring) {

   //no change to body
   //no return statement needed
}

//then when calling the function:

char hexstring[41];

convertToSHA(cc, hexstring);

//hexstring has been modified

或者只使用std::string代替。如果需要转换为c风格的字符串(但仍然无法返回指针),请使用c_str()

答案 1 :(得分:3)

我假设您正在使用此library。我觉得很奇怪,它声称是用C++写的,但没有利用C++成语。该函数修改指针,不返回任何内容,因此您需要一个局部变量。幸运的是,std::string s很乐意接受char []论证。

std::string Test::convertToSHA(const char* cc) {
    // ...
    char hexstring[41];
    sha1::calc(str,length,hash);
    sha1::toHexString(hash, hexstring);
    std::string ret(hexstring);

    return ret;
}