是野指针问题吗?但指针不是指向字元串首地址了吗?

还有个思路是这样的

因为现代的操作系统保护的是虚拟内存,系统保护虚拟内存并不保护物理内存

去看看开源的 macOS 代码中怎么找到虚拟内存对应的物理内存,再找找修改物理内存的方法

这样也可以大功告成的

事情就是这么个事情,方法就是这么个方法,至于做那就算了,都是掏粪的体力活,但有资料复制粘贴一下就几分钟的事

但这些就是经验而不是传统意义上我们所说的知识了

所以多多接受设定,不要强行出斧去想著跨级打怪越塔杀人,会变态的


  1. C语言中字元串的本质:实际上是以「 」结尾的字元数组;
  2. C语言中字元串储存的位置:1.静态储存区,程序载入内存时确定,程序运行时不可更改;2.动态储存区,程序运行时确定,程序运行时可更改;
  3. 形入"abcdefg"的字元串,称为字元串字面量常量的一种,只要在源代码中出现,编译时会把他指定到静态储存区,程序运行时不可更改
  4. 实际上,在源程序中,字元串常量本身可表示自身起始字元的指针,即:

putchar(*"abcdef");
// 输出结果:a

putchar(*("abcdef"+2));
// 输出结果:c


这个问题在我的C语言解惑圈子的【第244篇】【你问我答】【能把一个字元串常量拷贝给另一个字元串常量吗?】分析过,有兴趣的小伙伴可以加我微信:c-poop 进圈子查看!

这段C程序中,两个指针分别指向两个字元串,这种写法的意思就是说两个字元串是常量字元串!

何谓常量字元串?就是不能修改的字元串!

strcpy(a, b)这句话的意思就是把指针a指向的那个字元串修改为「ewnvlvfm」字元串,所以当然是不可以修改的,所以运行结果就不是你想的那个意思了?

如果是这么写呢?

char a[]="efvswvfm";

char b[]="ewnvl";

这就可以strcpy了!


推荐阅读:
相关文章