我的内存访问有问题。当为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*即可。我们不希望内存泄漏;)

10-08 11:30