String subscript out of range

closed account (iGLbpfjN)
Hey guys, I was doing nothing so I made myself an exercise in C++. I created a file (Password.dat) and put a aleatory code (aeggfCCDFVs222543123). Then, I wanted to create a program that breaks the password using brute-force attack (I know it's unnecessary, OK?)
I assigned string_archive with the code, then started to try every combination of letters and numbers. For string_archive[0], I tried every lower case, then every upper case, then every number (see the arrays) and so on...
The problem is that I'm getting the error: string subscript out of range. I know that I did something wrong in the for loops (maybe?), but what?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
	string password, string_archive;

	size_t i, j, k, l, m;

	// All letters from a to z
	char letters_lower[26] = {97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
	109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122};

	// All letters from A to Z
	char letters_upper[26] = {65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
	79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90};

	// All numbers
	int numbers[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

	ifstream fin;
	fin.open("Password.dat");	// Archive that holds the password
	fin >> string_archive;	// The line in the archive

	// Now, it begins the search
	for (i = 0; i < string_archive.length(); i++)
	{
		for (j = 0; j < 26; j++)
		{
			if (string_archive[i] == letters_lower[j])
			{
				password[i] = letters_lower[j];
			}
		}

		for (k = 0; k < 26; k++)
		{
			if (string_archive[i] == letters_upper[k])
			{
				password[i] = letters_upper[k];
			}
		}

		for (l = 0; l < 11; l++)
		{
			if (string_archive[i] == numbers[l])
			{
				password[i] = numbers[l];
			}
		}
	}

	// Prints the password
	for (m = 0; m < password.length(); m++)
	{
		cout << password[m];
	}
Last edited on
How about this?
1
2
string password, string_archive;
password.resize(100000, ' ');
The local troll wrote:
How about this?

Because it only introduces different problems.

To the OP: You aren't doing what you are describing and you are trying to modify elements of the string password that do not exist.

If a string has a size of 0, it contains no elements that you can access. Also, your numbers array needs to be characters ('0' to '9') rather than values (0 to 10), although there is no reason to have 3 different arrays at all.
@cire
I just simply let the OP know a way to fix the [Error: string subscript out of range] problem. Once the OP fixes this, the OP can move on.

Edit :
1
2
3
4
5
6
7
char letters_lower[26] = {97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122};

// All letters from A to Z
char letters_upper[26] = {65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90};

// All numbers
int numbers[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};


You treat the characters as if they are numbers not real characters. I don't know about two former arrays, but seriously there is something wrong with the latter (or the last) array.

password[i] = numbers[l];

Even though you did treat the last array as an int array, this line doesn't help. You cannot assign a std::string character that way. Here is an example describing what it should at least look like :

password[i] = (char)numbers[l] + '0';


Last edited on
Topic archived. No new replies allowed.