对字符指针指向字符串不能更改
2008-07-03 22:01
351 查看
对字符指针指向字符串不能更改
test.c
char* fmtstr="000.000"; //修改为char fmtstr[]="000.000";
char* fmttype="ZZZ.Z99";
char tname[]="";
strcpy(fmtstr , fmttype);
tmpnam(""); // 修改为tmpnam(tname)
以上代码会运行出错,
原因:
前面的这种表达是建立了一个fmtst的字符支付串指针,指向的一个内容为"000.000"的常量字符串的首地址,对于常量是无法更改其数值的。。。。而后种表达是建立了一个字符数组(字符串),是变量,变量的内容是"000.000",并且fmtstr指向了这个字符数组的首地址.
用命令objdump -s test,
-s参数会将所有段信息dump出来.你会看到字符串"000.000"位于.rodata段(只读数据段).
用GDB来调试core文档:gdb test core.2008
(gdb) where
(其他: 在文本段而不是默认数据段的只读数据区域中插入字符串。默认情况下这是在gcc中进行的。在gcc中,可通过使用-fwritable-strings获取字符传递可编写副本。)
test.c
char* fmtstr="000.000"; //修改为char fmtstr[]="000.000";
char* fmttype="ZZZ.Z99";
char tname[]="";
strcpy(fmtstr , fmttype);
tmpnam(""); // 修改为tmpnam(tname)
以上代码会运行出错,
原因:
前面的这种表达是建立了一个fmtst的字符支付串指针,指向的一个内容为"000.000"的常量字符串的首地址,对于常量是无法更改其数值的。。。。而后种表达是建立了一个字符数组(字符串),是变量,变量的内容是"000.000",并且fmtstr指向了这个字符数组的首地址.
用命令objdump -s test,
-s参数会将所有段信息dump出来.你会看到字符串"000.000"位于.rodata段(只读数据段).
用GDB来调试core文档:gdb test core.2008
(gdb) where
(其他: 在文本段而不是默认数据段的只读数据区域中插入字符串。默认情况下这是在gcc中进行的。在gcc中,可通过使用-fwritable-strings获取字符传递可编写副本。)
相关文章推荐
- 指向字符串的指针 和 字符数组的区别
- 指向字符串的指针与字符数组
- C语言的字符指针必须分配空间或者指向某个地址否则不能使用
- 删除 字符串中‘*’号 两端的除外。指针h、p分别指向第一个和最后一个字符
- 为什么???字符串字面量初始化给数组时可以更改,而初始化给指针不能更改?
- 常量指针-指向常量的指针,指针常量-指针本身是常量,常量-不能更改值的常量,数组指针-是指针int (*p)[n] 指针数组-是数组int *p[n]
- 字符指针动态创建字符串在使用时并不能完全取代字符数组
- C字符串、字符数组、指针数组、指向数组的指针 彻底研究
- [*注意指向常量的字符指针变量*]用指向常量的字符指针变量和字符数组方法把字符串a复制到字符串b中
- 【c语言】编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间
- 不能通过键盘输入一个字符串,并使未初始化的指针指向它
- 定义字符指针数组分别指向5个字符串常量,从小到大输出字符串内容
- 字符、字符数组(字符串)与指向字符串的指针
- 用字符指针指向一个字符串
- 用字符指针变量指向一个字符串,然后输出字符及其长度
- 关于字符串指针指向内容不能修改的问题
- 函数内 声明一个字符数组和一个指向字符串数组的指针 区别
- 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- 字符指针指向的字符串复制到字符数组里
- 为什么不能修改指向字符串的指针