数组和指针之间的区别

Nor*_* Me 4 c arrays pointers strcpy

昨天我在自制的"strcpy"功能上遇到了一些麻烦.虽然现在有效,但我有点困惑!

char* a = "Hello, World!"; //Works
char b[] = "Hello, World!"; //Works also

strcpy(a, "Hello!"); //Segmentation fault
strcpy(b, "Haha!!"); //Works..
Run Code Online (Sandbox Code Playgroud)

区别在哪里?为什么char指针会导致"分段错误"?

为什么这甚至有效?:

char* a = "Haha"; //works
a = "LOL"; //works..
Run Code Online (Sandbox Code Playgroud)

sim*_*onc 13

char* a = "Hello, World!";
Run Code Online (Sandbox Code Playgroud)

给你一个指向字符串文字的指针.只读存储器中可能存在字符串文字,因此无法更改其内容.

char* a = "Haha"; //works
a = "LOL"; //works..
Run Code Online (Sandbox Code Playgroud)

将指针更改为指向a不同的字符串文字.它不会尝试修改任何字符串文字的内容,因此是安全/正确的.

char b[] = "Hello, World!"
Run Code Online (Sandbox Code Playgroud)

在堆栈上声明一个数组,并使用字符串文字的内容对其进行初始化.堆栈内存是可写的,因此更改内存的内容非常安全.

  • 嗯,它是未定义的行为,所以它可能有用或者可能没有.我的建议是始终认为它不会. (4认同)
  • @NormalPeopleScareMe那是对的.它指向一个字符串*常量*. (2认同)