Hi everyone,

My program is crashing on taking input of alpha-numeric and store it in char[]. I don't know why, please anyone help !

sample input : C9H8O4MgOH

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

using namespace std;

bool hydroxide(char[]);

int main()
{
    char formula[] = "";

    cout<<"Enter chemical formula : ";
    cin >> formula;

    if(hydroxide(formula))
    {
        cout<<"\nFormula ends with sub-string OH"<<endl;
    }
    else
    {
        cout<<"\nFormula does not ends with sub-string OH"<<endl;
    }


    cout<<"\nProgram terminated !"<<endl;

    return 0;
}

bool hydroxide(char formula[])
{
    char *ptr1, *ptr2;

    ptr1 = strrchr(formula, 'O');
    ptr2 = strrchr(formula, 'H');

    cout<<"O index : "<<ptr1-formula <<endl;
    cout<<"H index : "<<ptr2-formula <<endl;

    //second last character is O and last character is H it returns true
    if(ptr1-formula == strlen(formula)-2 && ptr2-formula == strlen(formula)-1)
    {
        return true;
    }

    return false;

}   //end of hydroxide()

Everything works fine, but at the end program crashes and shows message that hyroxide.exe has stopped working.

Recommended Answers

All 4 Replies

When you don't specify the size of an array, the size is inferred from the initializer. So when you write int arr[] = {1,2,3}, that's the same as int arr[3] = {1,2,3}. Likewise char formula[] = {'\0'} is the same as char formula[1] = {'\0'} and equivalently char fomula[] = "" is the same as char formaula[1] = "".

So you're defining an array of size one. You're then writing into that array using cin >> formula. This will write more than one character into the array, meaning you're writing out of bounds. This invokes undefined behavior, possibly overwriting other variables' memory and/or causing a crash.

thanks for prompt reply sepp2k. Please tell me, we can assign string to char pointer like :

 char *str = "This is a string.";

but we can't access any character from char pointer with loop like str[0]. str[0] prints the whole string till last character.

How can i apply strrchr() function to find sub-string "OH" from end of string.

but we can't access any character from char pointer with loop like str[0]. str[0] prints the whole string till last character.

That's not true. str[0] will give you the character 'T' in your example, str[1] will give you 'h' and so on.

for C++ use std::string a instead. And instead of strlen use a.size(), to parse the data from the string,
use a.substr(int index, int noOfBytes)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.