【发布时间】:2012-09-21 08:47:24
【问题描述】:
这是我的一段代码
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 但无济于事。 有什么错误或任何方法可以摆脱这个吗????
【问题讨论】:
-
char *str1 = = (char*)malloc(sizeof(char)*(s.size()+1));甚至可以用 double = 编译吗? -
如果你真的使用 C++,正如你的标签所示,那么在所有情况下都切换到 std::string 而不是使用
char *!这通常会纠正由于无效的指针算术或错误的索引导致的所有无效访问......你真正想要实现什么?顺便说一句,变量t1完全未使用,s似乎已经包含正确的最终结果(小写字符串)!所以不需要str1和t1!!! -
@mathematician1975 - 这是一个编辑问题,抱歉......
-
@RandolphCarter - 这些变量将在代码中进一步使用...
-
但为什么要使用
char *?如果您必须在需要的地方使用 API 函数,请在最后一刻通过c_str()转换为char *!