Chinaunix
标题:
初级问题求教:指针操纵字面量字符串问题
[打印本页]
作者:
ppm10103
时间:
2013-05-04 10:11
标题:
初级问题求教:指针操纵字面量字符串问题
本帖最后由 ppm10103 于 2013-05-04 11:33 编辑
还得劳烦一下,
那指针字符串字面量是定义在DATA段,只读
那数组字符串字面量为什么就定义在堆栈段呢,可以读写,为啥不也在DATA段呢
#include <iostream>
using namespace std;
int main() {
cout << "ARRAY" << endl;
char c[20] = "hello world!\0";
c[0] = 'd';
for (int i = 0; i < 20; i++) {
cout << c[i];
}
cout << endl;
cout << "POINT" << endl;
char *pc = "hello world!";
*pc = 'a';
while (*pc) {
cout << *pc;
pc++;
}
cout << endl;
cout << "OVER" << endl;
return 0;
}
复制代码
结果是
ARRAY
dello world!
POINT
为什么没有看到第二个循环打印的结果呢?
作者:
ppm10103
时间:
2013-05-04 10:40
自己顶一下,就是*pc = 'a'; 这个为什么不起作用呢?
作者:
linux_c_py_php
时间:
2013-05-04 10:52
字符串常量不可以修改.
作者:
Frahm
时间:
2013-05-04 10:52
你确信没有崩吗?
作者:
ppm10103
时间:
2013-05-04 11:29
还得劳烦一下,
那指针字符串字面量是定义在DATA段,只读
那数组字符串字面量为什么就定义在堆栈段呢,可以读写,为啥不也在DATA段呢
作者:
ppm10103
时间:
2013-05-04 12:29
明白了,数组是分配内存在堆栈段的,指针一般编译器不管指向的内存分配
作者:
Frahm
时间:
2013-05-04 13:17
回复
5#
ppm10103
那个不能叫数组字面常量。那只不过是一种用字面常量来初始化数组的语法而已,就像char a[] = {...};还有你那个字面常量里不应该写\0,因为你用双引号就代表它是个字面常量,自动会\0结尾。
作者:
井蛙夏虫
时间:
2013-05-04 13:44
你确定程序是正常退出的,不是崩溃了。
pc指向的数据在只读数据段,*pc = 'a'写只读数据段内容应该会引起段错误的。
你用的是什么编译器,难道把数据分配在了可读写数据段?或者不是X86平台?
作者:
pmerofc
时间:
2013-05-04 15:32
提示:
作者被禁止或删除 内容自动屏蔽
作者:
ppm10103
时间:
2013-05-07 14:35
多谢各位了,这个搞明白了
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2