这是我的代码
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,但无济于事。 是否有任何错误或任何方法摆脱这个????
答案 0 :(得分:0)
虽然我不认为你的代码是完美的,但我不明白它为什么会崩溃。既然你说,printf(“\ n”)可以防止崩溃,我认为堆已经损坏了。也许显示来自myPredicate的代码或测试给定的代码片段以找到原因。
答案 1 :(得分:0)
如果您绝对需要std::string s
的可写副本,请检查this answer to a related question;而不是
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()!
这带来了额外的好处,不必担心之后是否释放任何内存!