我正在尝试编写一个函数来反转字符串,但是当我这样做时我得到了这样的异常:* str ++ = * end;谁知道是什么原因?提前致谢。
void reverse(char* str)
{
char *end = str;
char temp;
if(str)
{
while(*end)
{
end++;
}
end--;
while(str<end)
{
temp = *str;
*str++ = *end;
*end--=temp;
}
}
}
答案 0 :(得分:5)
有可能,您使用字符串文字调用该函数:
reverse("ablewasiereisawelba");
如果不调用未定义的行为,则无法修改字符串文字,而崩溃是对尝试修改字符串文字的有效响应。确保传递非常量数组:
char palindrome[] = "ablewasiereisawelba";
reverse(palindrome);
C ++ 2011标准,ISO / IEC 14882:2011说:
2.14.5字符串文字[lex.string]
¶12尝试修改字符串文字的效果未定义。
通常,字符串文字放在只读内存中,尝试修改字符串文字会导致“崩溃”。这肯定是对调用未定义行为的完全合理的回应。
答案 1 :(得分:0)
所以你需要这样做:
char str[] = "My string to reverse!";
reverse(str);
这意味着str
存储在可修改的内存中。大多数现代编译器存储文字字符串(即只读内存中的“引号内的任何内容”,因为您不打算修改原始字符串)。