Как вернуть char * из функции в C ++ [duplicate]

0

У меня есть следующая функция в 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
    Это действительно должно просто вернуть std::string .
  • 0
    НЕ возвращайте переменные стека. Либо new hexstring , либо пусть вызывающая convertToSHA выделяет память и передает ее в convertToSHA . Но лучший способ - вернуть std :: string (или вернуть по ссылке), так как вы используете c ++.
Показать ещё 4 комментария
Теги:
pointers

2 ответа

3
Лучший ответ

Я предполагаю, что вы используете эту библиотеку. Мне C++ странным, что он утверждает, что он написан в C++ но не использует идиомы C++. Функция изменяет указатель и ничего не возвращает, поэтому вам нужна локальная переменная. К счастью для вас, std::string радостью примет аргумент 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;
}
  • 0
    Да, спасибо. Я использую эту библиотеку. Теперь это работает. Спасибо за вашу помощь.
5

Вы никогда не сможете вернуть локальный указатель на C или 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_str() если вам нужно преобразовать строку c-style (однако вы все равно не можете вернуть указатель).

  • 0
    Я изменил код. Это все еще падает.
  • 1
    @BadLuckBrian Покажите нам новый код.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню