строка — ошибка C ++ буфера после strcpy

Это часть моего кода

    std::string s;
getline(cin, s);

std::cin.clear();
s.erase(std::remove_if(s.begin(), s.end(), my_predicate), s.end());
char *str1  = (char*)malloc(sizeof(char)*(s.size()+1));
const int length = s.length();
for(int i=0; i < length; ++i)
{
s[i] = std::tolower(s[i]);
}
strncpy(str1,s.c_str(), s.length()+1);

printf("\n");

Проблема в том, что если я не распечатываю \ n код, происходит сбой.
Я пробовал memcpy и strdup, но безрезультатно.
Есть ли какая-либо ошибка или какой-либо способ избавиться от этого ????

-2

Решение

Если вам абсолютно необходимо иметь доступную для записи копию std::string s, проверять этот ответ на связанный вопрос; вместо

char *str1  = (char*)malloc(sizeof(char)*(s.size()+1));
strncpy(str1,s.c_str(), s.length()+1);

в основном, сделайте это:

boost::scoped_array<char> writable(new char[s.size() + 1]);
std::copy(s.begin(), s.end(), writable.get());
writable[s.size()] = '\0';

// access char * via writable.get()!

Это дает дополнительное преимущество: вам не нужно беспокоиться о том, освобождать ли память потом!

0

Другие решения

Хотя я не думаю, что ваш код совершенен, я не понимаю, почему он должен вылетать. Поскольку вы говорите, printf («\ n») предотвращает сбой, я предполагаю, что куча уже повреждена. Возможно, покажите код из myPredicate или протестируйте данный фрагмент кода отдельно, чтобы найти причину.

0

По вопросам рекламы [email protected]