我在c ++中有以下功能
char* Test::convertToSHA(const char* cc) {
const char* salt ="sh$^$#@!&7hbfvatfacv@@@@bagg=shjgvshvcbschj";
time_t currentTime;
time(¤tTime);
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");
这导致我的代码崩溃。我回来一个字符串有问题吗?我怎么能从这个功能回来?
答案 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;
}