求解答…解决方案
求解答…
char *a="abc";
*a=‘A’;
为什么错了,为什么用指针不能修改,而数组却可以?这里表明了他们存储上什么样的区别呢?
------解决思路----------------------
"abc"表示一个常量字符串,你让一个指针指向这样的内存地址,不可以对其进行修改,因为是常量内容
------解决思路----------------------
char *a="abc";声明的是一个常量字符串,字符串中的内容是不可用修改的
char a[]="abc";声明的才是字符数组,是可以修改的
------解决思路----------------------
------解决思路----------------------
比如说 char buffer[] = "abc";
这句话的意思是 用字符串abc给buffer初始化 编译器会自动分配4个字节给buffer所在的空间 (加上\0)
char buffer[5] = "abc" 同上 编译器不会自动分配空间 会赋值 a b c \0 (buffer[4]在有些编译器没赋值的自动补\0)
对于目标文件 linux .o windows .obj (在链接成可执行文件之前格式)
而char *a="abc"; 只是用一个指针引用 这个字符串常量"abc"的地址 右边的字符串常量 “abc”一般保存在 .rodata中 有的编译器特殊情况下会保存在.data段中 而char buffer[] 这个是 保存在栈中的。
虚拟内存地址空间的概念 每一个程序都会装作到一个虚拟内存空间的这种概念(下面没完全按虚拟内存 从高到低的顺序写)
------------
系统内核
堆
栈
.rodata //只读数据段
.data //可读数据段 --------------cache-----------------> 真实的物理内存
.bss //
.text //代码段
.......
------------
char *a="abc";
*a=‘A’;
为什么错了,为什么用指针不能修改,而数组却可以?这里表明了他们存储上什么样的区别呢?
------解决思路----------------------
"abc"表示一个常量字符串,你让一个指针指向这样的内存地址,不可以对其进行修改,因为是常量内容
------解决思路----------------------
char *a="abc";声明的是一个常量字符串,字符串中的内容是不可用修改的
char a[]="abc";声明的才是字符数组,是可以修改的
------解决思路----------------------
#pragma comment(linker,"/SECTION:.rdata,RW")
//加这句可以让常量区可写,后果自负!
------解决思路----------------------
比如说 char buffer[] = "abc";
这句话的意思是 用字符串abc给buffer初始化 编译器会自动分配4个字节给buffer所在的空间 (加上\0)
char buffer[5] = "abc" 同上 编译器不会自动分配空间 会赋值 a b c \0 (buffer[4]在有些编译器没赋值的自动补\0)
对于目标文件 linux .o windows .obj (在链接成可执行文件之前格式)
而char *a="abc"; 只是用一个指针引用 这个字符串常量"abc"的地址 右边的字符串常量 “abc”一般保存在 .rodata中 有的编译器特殊情况下会保存在.data段中 而char buffer[] 这个是 保存在栈中的。
虚拟内存地址空间的概念 每一个程序都会装作到一个虚拟内存空间的这种概念(下面没完全按虚拟内存 从高到低的顺序写)
------------
系统内核
堆
栈
.rodata //只读数据段
.data //可读数据段 --------------cache-----------------> 真实的物理内存
.bss //
.text //代码段
.......
------------