2012-12-12 98 views
0

可能重复时:
Why do I get a segmentation fault when writing to a string?访问冲突错误逆转串C++

下面的简单函数应扭转到位的字符阵列。

void reverse(char* str) 
{ 
    char* last = str; 

    // find end of the string 
    while(*last) { 
     ++last; 
    } 

    // swap characters until the pointers meet in the middle 
    while(str < last) 
    { 
     --last; 
     char temp = *str; 
     *str = *last; 
     *last = temp; 
     ++str; 
    } 
} 

int main() 
{ 
    char* a= "Hello"; 
    reverse(a); 
    return 0; 
} 

代码编译。但它会引发有关访问冲突的运行时错误。根据调试器的罪魁祸首是以下行:

char temp = *str; 

任何想法为什么会发生?

+0

这不再是有效的C++代码,并有很好的理由。 – Puppy

+0

您包含'',但不要使用任何流,并且您使用'using namespace std',但不要使用该名称空间中的任何内容。 – dreamlax

回答

6
char* a= "Hello"; 

指针a指向字符串文字。根据标准,尝试修改字符串文字会导致未定义的行为。在实现的情况下,分段错误表明编译器正在选择将字符串文字放置在不可修改的内存中。

声明a是一个可修改的字符串。例如,像这样:

char a[] = "Hello"; 
+2

来吧,你应该知道更好地回答这样的问题与数百重复 –

+0

谢谢!我学到了东西。 – Alexey

+3

@EdS。这是为什么? –