c / c ++的新手与指针混淆

时间:2014-08-15 12:19:48

标签: c++ pointers

我是c / c ++编程的新手,目前我正在研究一些基本的程序来接触这门语言。我最新的程序是一个简单的hex_xor函数,它遵循Cryptopals Challenge 2的指令。但是我已经收到错误了,而且我假设我正在使用我正在使用的指针做一些可怕的错误。

以下是我的计划的一部分:

const char* hex_char_to_bin(char c)
{
     switch(toupper(c))
     {
             case '0': return "0000";
             case '1': return "0001";
             case '2': return "0010";
             case '3': return "0011";
             case '4': return "0100";
             case '5': return "0101";
             case '6': return "0110";
             case '7': return "0111";
             case '8': return "1000";
             case '9': return "1001";
             case 'A': return "1010";
             case 'B': return "1011";
             case 'C': return "1100";
             case 'D': return "1101";
             case 'E': return "1110";
             case 'F': return "1111";
     }
}

const char* hex_binary(const char* c){
     std::string result = "";
     for(int i = 0; i < strlen(c); i++){
             result += hex_char_to_bin(c[i]);
     }

     return result.c_str();
}

int main(){
    std::string s1 = "1c0111001f010100061a024b53535009181c";
    std::string s2 = "686974207468652062756c6c277320657965";

    const char* bin1 = hex_binary(s1.c_str());
    const char* bin2 = hex_binary(s2.c_str());
    std::cout << bin1 << "\n" << bin2 << std::endl;
    return 0;
}

输出如下:

011010000110100101110100001000000111010001101000011001010010000001100010011101010110110001101100001001110111001100100000011001010111100101100101
011010000110100101110100001000000111010001101000011001010010000001100010011101010110110001101100001001110111001100100000011001010111100101100101

在两个变量(bin1 / 2)中都是第二个十六进制字符串的二进制转换。我的目标是(显然)将两个二进制字符串保存在不同的变量中,因此我可以继续使用xor-function。有人可以指出我未能实现目标的原因以及原因吗?其他提示也是受欢迎的!

1 个答案:

答案 0 :(得分:4)

当主c_str()对象不再存在时,您无法使用string的结果。因此,您引用已释放的资源并面临未定义的行为。

如果我是你,我会更改hex_binary()以返回std::string并返回result而不使用c_str()