【发布时间】:2016-04-10 08:19:28
【问题描述】:
我收到“访问冲突”错误,但无法确定其根本原因。我是 C++ 新手,正在准备 C++ 编码竞赛作为初学者。请帮助我找到它的根本原因。请找到随附的屏幕截图。
提前致谢。
这是我在单个 .cpp 文件中的代码。
#include <iostream>
using namespace std;
void reverse(char *str) {
char * end = str;
char tmp;
if (str) {
while (*end) {
++end;
}
--end;
while (str < end) {
tmp = *str;
*str++ = *end; //Getting exception here
*end-- = tmp;
}
}
}
int main ()
{
char *str="Test";
cout << "Before change"<<str; // prints Hello World!
reverse(str);
cout << "After change"<<str; // prints I'm a C++ program
getchar();
}
【问题讨论】:
-
您不能写入字符串文字,
char *str="Test";是根本原因并且不是有效的 C++,我很惊讶您的编译器没有抱怨它应该是char const* str ="Test";。跨度> -
其实 char* str="Test" 在 c++ 中是允许的。字符串文字被转换为 const char* 类型。但是str指向的值不能改变,因为它是一个常数。
-
@bkVnet 自 C++03 起已弃用,自 C++11 起无效。
-
@bkVnet
char const*和const char*没有区别,它们是同一类型。你在想char* const。 -
@vivek 如果你像给定的答案 char str[]="test" 那样做,那么你传递的不是 const char* 而是 char* 应该可以正常工作。