0

我正在编写一个简单的 XOR 加密程序,然后我注意到函数的返回值不是我期望看到的那种。

我只是在我的代码中找不到问题,有人可以帮助我吗?

这是程序代码:

#include "windows.h"
#include "iostream"

using namespace std;


LPCSTR hasala(string original, char key){

  string changed;

  for (int temp = 0; temp < original.size(); temp++){
  changed += original[temp] ^ (int(key) + temp) % 255;
  }

  cout << changed.c_str()<<"\n\n";//works, output "acagaca"

  LPCSTR adart = changed.c_str();

  cout << adart<<"\n\n";//works, output "acagaca"

  return adart;

}

int main(){

    cout << hasala("abcdefg", 0);//doesn't work, output "||||@ER|||"...

    cout << "\n\n";

    Sleep(8000);

    return 0;
}
4

3 回答 3

3

您拥有的指针指向std::string堆栈上的内存 - 当std::string超出范围时,它会释放它,然后您读取它。你必须返回std::string,不是LPCSTR

于 2012-04-09T13:04:52.343 回答
3

您正在返回changed.c_str(),它只是指向由changed. changed是一个局部变量,并在函数结束时被销毁,所以你最终返回一个指向不再存在的东西的指针。

直接返回 std::string changed

于 2012-04-09T13:06:49.693 回答
1

您正在返回在堆栈上分配的局部变量。

基本上你的代码翻译成:

LPCSTR hasala(string original, char key){
string changed;
return changed.c_str();
}

分配内存(调用者必须释放它)或返回 std::string

于 2012-04-09T13:06:38.807 回答