c++ - 交换 C++ 数组的 2 个字符

标签 c++ arrays for-loop char c-strings

我的内存访问有问题。当 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/

相关文章:

c++ - 在 AngelScript 中注册一个 C++ 类并传递一个类实例

arrays - Angular - 无法添加属性 xxxx,对象不可扩展

javascript - 将二维数组填充到表中(输出所有可能的组合)

javascript - 将 x 轴更改为月份而不是数字

javascript - 在对象数组中的嵌套对象数组中按值查找 - 大型数据集

c++ - 为什么我在 C++ 中收到针对此基于范围的 for 循环的警告?

c++ - 模板函数可以作为另一个函数的模板参数吗?

c++ - 有没有一种可控的方法可以让我的 C++ 程序在在线评委上变慢?

c++ - STL分配器复制构造函数要求的目的是什么

JavaScript 循环 : for. ..in vs for