如何解决访问冲突写入位置错误?

11 memory-management access-violation

我有一个简单的程序,我得到访问冲突*(str + start).为什么?我应该能够改变它.对?

void fn()
{
     char *str = "Hello wordl!";
     int end = strlen(str);
     int start = 0;
     end--;
     while(start < end)
     {
         *(str + start) = *(str + end);  <--- Access violation writing location *(str + Start).
         end--;
         start++;
     }
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 26

char *str = "Hello World";是一个const字符串,不能修改.编译器可以将其放入不可写的位置,从而导致崩溃.

替换声明char str[] = "Hello World";应该执行您想要的操作,将字符串放入堆栈中的可修改数组中.


Mat*_*ttJ 4

不,你不应该。“Hello world”是一个常量字符串文字,您需要使用C 中的malloc()来分配内存,或者如果您想要可以自由修改的内存,则需要使用 C++ 中的new来分配内存。