为什么char *a="xxxxx", *b="xxx"; strcpy(a, b);的用法不行?
是野指针问题吗?但指针不是指向字元串首地址了吗?
还有个思路是这样的
因为现代的操作系统保护的是虚拟内存,系统保护虚拟内存并不保护物理内存
去看看开源的 macOS 代码中怎么找到虚拟内存对应的物理内存,再找找修改物理内存的方法
这样也可以大功告成的
事情就是这么个事情,方法就是这么个方法,至于做那就算了,都是掏粪的体力活,但有资料复制粘贴一下就几分钟的事
但这些就是经验而不是传统意义上我们所说的知识了
所以多多接受设定,不要强行出斧去想著跨级打怪越塔杀人,会变态的
- C语言中字元串的本质:实际上是以「 」结尾的字元数组;
- C语言中字元串储存的位置:1.静态储存区,程序载入内存时确定,程序运行时不可更改;2.动态储存区,程序运行时确定,程序运行时可更改;
- 形入"abcdefg"的字元串,称为字元串字面量,常量的一种,只要在源代码中出现,编译时会把他指定到静态储存区,程序运行时不可更改;
- 实际上,在源程序中,字元串常量本身可表示自身起始字元的指针,即:
putchar(*"abcdef");
// 输出结果:aputchar(*("abcdef"+2));
// 输出结果:c
这个问题在我的C语言解惑圈子的【第244篇】【你问我答】【能把一个字元串常量拷贝给另一个字元串常量吗?】分析过,有兴趣的小伙伴可以加我微信:c-poop 进圈子查看!
这段C程序中,两个指针分别指向两个字元串,这种写法的意思就是说两个字元串是常量字元串!
何谓常量字元串?就是不能修改的字元串!
strcpy(a, b)这句话的意思就是把指针a指向的那个字元串修改为「ewnvlvfm」字元串,所以当然是不可以修改的,所以运行结果就不是你想的那个意思了?
如果是这么写呢?
char a[]="efvswvfm";
char b[]="ewnvl";
这就可以strcpy了!
推荐阅读: