Чому зміна аргументу в циклі for збою програми? це занадто динамічно для c ++?
for(unsigned int x = 0; x < mystring.size(); x++)
mystring = mystring.substr(0, mystring.size());
коли я змінив свій реальний код, щоб зробити це (mystring.size ()> 0), моя програма все одно вийшла з ладу
EDIT:
в порядку. Ви, хлопці, мали рацію, код не виходить з ладу через зміну значення mystring. однак цей код настільки простий, що я не бачу, звідки походить помилка:
template <class Algorithm>
class ECB{ // Electronic codebook
private:
Algorithm algo;
uint8_t blocksize;
public:
ECB(Algorithm instance, std::string = "")
: algo(instance) {
blocksize = algo.blocksize() >> 3;
}
std::string encrypt(std::string data){
data = pkcs5(data, blocksize);
return data;
}
std::string decrypt(std::string data){
return remove_padding(data);
}
};
будь ласка, не посилайте мене на сайти, щоб навчити мене користуватися ЄЦБ. його не люблять його важкий. однак цей код дратує
Відповіді:
6 за відповідь № 1Це не повинно падати. Що ви фактично робите, це присвоєння одного і того ж рядка тій самій змінній n разів, де n - довжина рядка. Це цілком законно в C ++. Ви не розповідаєте нам всю історію
3 для відповіді № 2
Для мене він не виходить з ладу (g ++ 4.4.5), точний код, який я намагався:
#include <iostream>
#include <string>
using namespace std;
int main() {
string mystring = "hello";
for(unsigned int x = 0; x < mystring.size(); x++)
mystring = mystring.substr(0, mystring.size());
}
2 для відповіді № 3
Це виглядає проблемою з оточуючим кодом, який ви не включали.
Якщо припустити, що mystring є std :: string, це призначення не має значення. і ваш цикл нічого не робить.
2 для відповіді № 4
Цикл правильний (хоча він нічого не робить, як зазначалося), тому ви, мабуть, десь зіпсуєте простір пам'яті. Запустіть програму через valgrind, і ви повинні знайти проблему.