内存访问冲突.这个看似简单的程序出了什么问题?

Mar*_*ark 3 c

这是一个快速的程序,我刚刚写了,看看我是否记得如何从头开始一个c ++程序.它只是反转一个字符串(就地),看起来一般对我来说是正确的.为什么这不起作用?

#include <iostream>
using namespace std;

void strReverse(char *original)
{
    char temp;
    int i;
    int j;
    for (i = 0, j = strlen(original) - 1; i < j; i++, j--)
    {
        temp = original[i];
        original[i] = original[j];
        original[j] = temp;
    }
}

void main()
{
    char *someString = "Hi there, I'm bad at this.";
    strReverse(someString);

}
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 15

如果你改变了这个,那就是someString一个指向只读字符串文字的指针:

char *someString = "Hi there, I'm bad at this.";
Run Code Online (Sandbox Code Playgroud)

这个,它是someString一个可修改的数组char,从字符串文字初始化:

char someString[] = "Hi there, I'm bad at this.";
Run Code Online (Sandbox Code Playgroud)

你应该有更好的结果.

虽然someString原始code(char*)中的类型允许修改char它指向的s,因为它实际上指向一个字符串文字(不允许被修改),试图通过指针进行任何修改导致什么是技术上称为未定义的行为,在您的情况下是内存访问冲突.


sbi*_*sbi 11

如果这不是作业,C++标签要求您使用C++标准库执行此操作:

std::string s("This is easier.");
std::reverse(s.begin(), s.end());
Run Code Online (Sandbox Code Playgroud)

哦,这int main()总是int main(),该死的!