Search code examples
functionvisual-c++rot13

C++ ROT13 Function Crashes


I'm not too good with C++, however; my code compiled, but the function crashes my program, the below is a short sum-up of the code; it's not complete, however the function and call is there.

void rot13(char *ret, const char *in);

int main()
{
    char* str;
    MessageBox(NULL, _T("Test 1; Does get here!"), _T("Test 1"), MB_OK);
    rot13(str, "uryyb jbeyq!"); // hello world!
    /* Do stuff with char* str; */
    MessageBox(NULL, _T("Test 2; Doesn't get here!"), _T("Test 2"), MB_OK);
    return 0;
}

void rot13(char *ret, const char *in){
    for( int i=0; i = sizeof(in); i++ ){
        if(in[i] >= 'a' && in[i] <= 'm'){
            // Crashes Here;
            ret[i] += 13;
        }
        else if(in[i] > 'n' && in[i] <= 'z'){
            // Possibly crashing Here too?
            ret[i] -= 13;
        }
        else if(in[i] > 'A' && in[i] <= 'M'){
            // Possibly crashing Here too?
            ret[i] += 13;
        }
        else if(in[i] > 'N' && in[i] <= 'Z'){
            // Possibly crashing Here too?
            ret[i] -= 13;
        }
    }
}

The function gets to "Test 1; Does get Here!" - However it doesn't get to "Test 2; Doesn't get here!"

Thank you in advanced. -Nick Daniels.


Solution

  • str is uninitialised and it is being dereferenced in rot13, causing the crash. Allocate memory for str before passing to rot13() (either on the stack or dynamically):

    char str[1024] = ""; /* Large enough to hold string and initialised. */
    

    The for loop inside rot13() is also incorrect (infinte loop):

    for( int i=0; i = sizeof(in); i++ ){
    

    change to:

    for(size_t i = 0, len = strlen(in); i < len; i++ ){