我正在尝试编写一个函数来反转字符串,但是当我这样做时遇到了这样的异常: *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;
}
}
}
最佳答案
很可能,您使用字符串文字调用了该函数:
reverse("ablewasiereisawelba");
如果不调用未定义的行为,则无法修改字符串文字,并且崩溃是对尝试修改字符串文字的有效响应。确保传递一个非常量数组:
char palindrome[] = "ablewasiereisawelba";
reverse(palindrome);
C++ 2011 标准 ISO/IEC 14882:2011 规定:
2.14.5 String literal [lex.string]
¶12 The effect of attempting to modify a string literal is undefined.
通常,字符串文字被放置在只读内存中,尝试修改字符串文字会导致“崩溃”。这当然是对调用未定义行为的完全合法的响应。
关于c++ - 访问违规写入位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14664510/