BIU
BIU

Reputation: 2430

C++ Int getting random value after function that isn't supposed to change it

Okay - yes, this is homework, but it isn't mine. I have a friend taking an introductory C++ course who asked me for help, and I helped them write this program, but there is one weird bug that I can't figure out. Any helpful suggestions would be greatly appreciated. Thanks!!

The following is the code. The problem is that after the add_loop function, the int loop_size gets a random value. Within the function, it has the value it is supposed to have, but afterwards, it changes.

#include <iostream> 
#include <string>
#include <stdlib.h>
#include <time.h>

using namespace std;
#define STRING_SIZE 50

void get_template (char StemLoop [])
{
    char Template [STRING_SIZE];
    cout<<"Please enter a template for the stem:";
    cin>> Template;
    strcpy (StemLoop, Template);
}

void add_loop (char StemLoop[], int loop_size)
{

    char random_loop [STRING_SIZE];

    int random_array[STRING_SIZE];

    for (int i=0; i<loop_size; i++)
    {
        random_array[i] = rand() % 4;
        if (random_array[i]==0)
            random_loop[i]='A';
        else if (random_array[i]==1)
            random_loop [i]='U';
        else if (random_array[i]==2)
            random_loop [i]='G';
        else if (random_array[i]==3)
            random_loop [i]='C';

    }
    strcat (StemLoop, random_loop);
}

void add_complement(char StemLoop[], int loop_size)
{

    int  x =strlen(StemLoop);
    int j=0;
    char complement [STRING_SIZE]="";
    for (int i=0; i<(x-loop_size); i++)
    {
        if (StemLoop[i]=='A')
            complement[j]='U';
        else if (StemLoop[i]=='U')
            complement[j]='A';
        else if (StemLoop[i]=='G')
            complement[j]='C';
        else if (StemLoop[i]=='C')
            complement[j]='G';
        j++;
    }
    strcat(StemLoop,complement);
}

void main()
{
    int loop_size=0;
    cout<<"Please enter the size of the loop: ";
    cin>>loop_size;

    char StemLoop [STRING_SIZE];

    //Part1: the template
    get_template (StemLoop);

    //This is supposed to be the function that adds the loop of random "genes".
    //It works, and within it the int loop_size is the correct value...
    add_loop (StemLoop, loop_size);
    /*...but here it is a random number.  It's as if the random value generated
    within the function is getting assigned to it.  And of course, it's throwing off the 
    entire program.
    */

    //Part#3: the complement
    add_complement (StemLoop, loop_size);
    cout<<"The complete stem-loop strand is:"<<StemLoop<<endl;
}

Upvotes: 0

Views: 602

Answers (1)

cnicutar
cnicutar

Reputation: 182619

You're not 0-terminating random_loop before you use it in strcat, so strcat can write all over your stack. Try this:

random_loop[i] = 0;
strcat (StemLoop, random_loop);

A more serious problem could be that you're not checking you have enough room to strcat.

Upvotes: 3

Related Questions