我的内存访问有问题。当 i = 0
时,Visual Studio 将引发异常并引用以下代码中标记的行。
无法访问 0x00AD8B3B
并且 0x00AD8B3B
等于 scr+np-i
如何修复 for 循环体以解决此问题?
int o_strrev(char* scr)
{
int np = strlen(scr) - 1;
char tmp;
if (!scr) return -1;
if (!*scr) return -1;
for (int i = 0; i < np / 2; i++)
{
tmp = scr[np-i];
scr[np-i] = scr[i]; # this line
scr[i] = tmp;
}
return 0;
}
最佳答案
正如@Revolver_Ocelot 所指出的,您可能从字符串文字中传递了 const char*
。由于根据定义,这些是常量,因此您不能按照您尝试的方式修改它们。您需要一些方法将 const char*
转换为非常量 char*
。这些方面的内容对您有用:
string str = "string";
char* cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());
我已经使用非常量 char*
在 g++ 中编译了您的代码,它工作正常。请记住在完成后释放您的 char*
。我们不希望内存泄漏 ;)
关于c++ - 交换 C++ 数组的 2 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34872307/