Valhalla Legends Forums Archive | C/C++ Programming | getting an error at runtime, help please

AuthorMessageTime
Eli_1
I'm trying to make the switch from VB to C/C++. I'm new to it and I'v only been trying to use C++ for a few days now. I wanted to make a quick program that would let me compare the Left() and Right() functions I used in VB to code that would do the same thing in C++. but I get 3 errors at runtime:
1.) MAIN caused an error in MAIN.exe - MAIN will now close.
2.) MAIN caused an error in MAIN.exe - MAIN will now close.
3.) MAIN caused an error in Kernel32.DLL - MAIN will now close.

btw, this code was compiled with a Borland c++ compiler

[code]
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define max_char   256

int main() {
   char *input;
   string new_string;
   bool go_again=true;

   while (go_again==true) {
      cout << "Enter a string to change: ";
      cin.getline(input,max_char);

if (strcmp(strlwr(strdup(input)),"/quit")==0)
go_again=false;
else if(strcmp(strlwr(input),"/clear")==0 || strcmp(strlwr(input), "/restart")==0)
clrscr();
else if (strcmp(strlwr(input),"/help")==0)
cout << "Commands:\n" << "/quit\n" << "/clear\n" << "/restart\n" << "End of commands.\n";
else {
cout << "\nYou entered: " << input << "\n";
cout << "\n";
cout << "Here is the string after being manipulated in VB code and in c++ code.\n\n";
cout << "VB code: string = right(data, 2)\n";
cout << "c++ code: string=data.substr(b-2,2); b = strlen(input);, data=string(input);\n";
int b;
b=strlen(input);
new_string=string(input);
cout << "****New string: " << new_string.substr(b-2,2) << "\n";

cout << "VB code: string = left(data, 2)\n";
cout << "c++ code: string=data.substr(0,2); data=string(input);\n";
cout << "****New string: " << new_string.substr(0,2) << "\n";

cout << "VB code: string = left(data, len(data) - 2)\n";
cout << "c++ code: string=data.substr(0,b-2); b=strlen(input); data=string(input);\n";
cout << "****New string: " << new_string.substr(0,b-2) << "\n";

cout << "VB code: string = right(data, len(data) - 2)\n";
cout << "c++ code: string=data.substr(2,b-2); b=strlen(input); data=string(input);\n";
cout << "****New string: " << new_string.substr(2,b-2) << "\n";
go_again=true;
}
}
return 0;
}
[/code]
:'(
February 7, 2004, 4:37 AM
K
First, some suggestions:

[code]
#include <iostream>
#include <string>
#include <cstdio> // are you actually using this?
#include <cstdlib> // ditto
#include <conio.h>

using namespace std;
[/code]

As to your problem:

when you declare a pointer like this:

[code]char* szInput;[/code]

It doesn't point to anything; it has no memory / storage space asosciated with it; it points to some random address in memory. So when you try do this:

[code]cin.getline(szInput)[/code]

You write to some random place in memory that you don't own. (A Bad Thing (tm)).

Options:
A) use a std::string (getline(new_string))
B) use an array: char szInput[255];
C) dynamically allocate and deallocate the memory.
[code]char* szText = new char[255];

cin.getline(szText)
// ...

delete [] szText;[/code]
February 7, 2004, 5:05 AM
Eli_1
thank you very very very much, K. ;D

well than I'm confussed at exactly what char* is, I assumed it was like... a char with unlimited size... like a string...
February 7, 2004, 5:12 AM
K
A char* is a pointer to the first index of an array of characters; there is no native string type in c/c++. With that said, the std::string class found in <string> provides exactly what you want. You can do things like:

[code]
string s = "hello ";
s += "world";

if (s == "hello world")
s = s.substr(0, s.find(" "));

cout << s << endl;
[/code]
February 7, 2004, 5:26 AM

Search