Я был довольно запутан во время программирования раньше, но этот берет торт. В основном я устанавливаю значение в один цикл for, и в следующей итерации он изменяется на значение следующего.Изменения переменной стоимости сами по себе
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < numWords[i]; ++j) //numWords [0] = 9, numWords [1] = 7
{
stb[i][j].word = const_cast<char*>(is (j + 1,1).c_str()); //is(int,length[opt]) converts int to string, c_str() returns const char *, but I need char *
cout << is(j+1,1) << ' ' << stb[i][j].word << '\n';
}
}
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < numWords [i]; ++j)
{
cout << stb[i][j].word << ' ';
}
cout << '\n';
}
Выход:
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 1 1 2 2 3 3 4 4 5 5 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
Моя единственная догадка сейчас что-то с сопзЬ, но это не имеет смысла, поэтому она будет держать изменения всех предыдущих элементов массива ...
Вы еще должны показать нам 'is()'. –
Ну, я просто нашел причину. Прежде всего, is() отлично работает, но я только что узнал, что, поскольку строки не должны хранить каждый символ в последовательных ячейках памяти, как только строка, которую вы передаете cstr(), изменяется, так и char * вы получаете от него. Go figure Я трачу на это много времени:/ – chris
НЕ используйте 'const_cast'. Когда-либо. (К тому времени, когда у вас будет достаточно опыта на C++, чтобы знать, когда это будет безопасно, вы узнаете лучшие методы.) –