这是一个快速的程序,我刚刚写了,看看我是否记得如何从头开始一个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(),该死的!