C语言中关于字符串常量的进一步分析 转
请在(且只能在TC2.0)中运行下面代码,先不要看结果,想想会得到什么:
#include<stdio.h> #include<stdlib.h>// 文章要求代码在Tc下运行 int main(int argn, char* argv[]) {char* szStringA = "Hello,world!";char* szStringB = "Hello,world!";*szStringA = '-'; // dev下上面的语句在执行过程中异常退出,说明dev并不允许改变字符串常量, dev下,如果查看szStringA 和 szStringB的值的话,这两个指针的值话,也是一样的 puts(szStringB);return 0; }
输出结果是:"-ello,world!";。是否和你想象的结果不一样呢?
ANSI C明确说明:修改字符串常量,效果是未定义的。
首先我们得清楚,如何才能得到字符串常量?只有一种方式:char* szString = “Hello,world!”;这个声明得到一个字符串常量。那么char szString[] = “Hello,world!”;可以吗?不可以!这样得到的是字符串变量。好了,回过来,由于ANSI C没有要求编译器实现者如何具体对字符串常量进行处理,所以有些编译器会把相同的多个字符串常量看成一个(注意:这种优化仅有可能出现在字符串常量中,不要把泛泛的用于其他类型的常量。如:int num1 = 11;int num2 = 11;虽然是两个相同的常量,但是修改num1不会影响num2),目的是为了节约内存空间,所以上面的例子中,当修改字符串a时,b也被修改了。从这里可以看出,TC2.0有对字符串常量进行优化,而其他的编译器(如:DEVC++5.0)不一定也会优化,结果可能是无法通过编译,或者通过编译但是结果是垃圾值。由于这些种种不确定因素,我们应尽量避免修改字符串常量。
如果必须修改字符串就没有办法呢?有!一定有!请注意:我们要的效果是修改字符。因此,只需要定义字符串变量,而不是字符串常量。前面说过,可以用数组的方式定义char szString[] = “Hello,world!”;;这样,在程序中就可以修改字符串了。试试下面代码:
#include<stdio.h> #include<stdlib.h> int main(int argn, char* argv[]) {char szStringA[] = "Hello,world!";char szStringB[] = "Hello,world!";// 这样其实是声明了一个数组大小由后面初始化常量决定的字符数组变量 *szStringA = '-';puts(szStringB);return 0; }
这样的代码能够在dev下面运行,而且看起来是修改了一个常量.
转自:http://blog.csdn.net/andylyc/article/details/2046225
转载于:https://www.cnblogs.com/Lyush/archive/2013/01/09/2852361.html
C语言中关于字符串常量的进一步分析 转相关推荐
- C语言中可以用字符串常量来,C语言中的字符串常量
C语言中的字符串常量 字符串常量是由一对双引号括起的字符序列.例如: "CHINA" ,"C program: , "$12.5" 等都是合法的字符串 ...
- c语言字符常量和字符串常量_C语言中的字符常量
c语言字符常量和字符串常量 Any character (a single character) that is enclosed within the single quotes (like, 'A ...
- c语言字符串前加l,【C】 30_C语言中的字符串
字符串的概念 字符串是有序字符的集合 字符串是程序中的基本元素之一 C 语言中没有字符串的概念 C 语言中通过特殊的字符数组模拟字符串 C 语言中的字符串是以 '\0' 结尾的字符数组 字符串与字符数 ...
- 【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析
之前有一篇文章是学习了字符和字符串的,可以与之结合学习:[C语言进阶深度学习记录]十二 C语言中的:字符和字符串 文章目录 1 字符串的概念 1.1 字符串与字符数组 1.2 字符数组与字符串代码分析 ...
- 在C语言中如何让常量起作用,解析C语言中如何正确使用const
基本解释 const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些 ...
- c语言中字符怎么表示6,6、C语言中的字符串
一.C语言中的字符串 字符串是一种重要的数据类型,但是C语言并没有显示的字符串数据类型,不像java有String ,OBC有NSString等等.所以C语言中的字符串一般以字符串常量的形式出现或者存 ...
- c语言中有裁剪字符串的函数吗,C语言中的字符串截取函数
/*======================================================== 子数整数 源程序名 num.??? (pas,c,cpp) 可执行文件名 num. ...
- java语言中修饰一个常量_接口中定义一个常量所用的修饰符有: (5.0分)_学小易找答案...
[判断题]Java中的接口不允许被继承 (5.0分) [单选题]下列程序的输出结果是( ) public class Ex_36{ public static void main(String arg ...
- c语言中字符型常量在内存中存放的是,【2017年整理】c语言中字符型常量与变量使用注意事项.doc...
[2017年整理]c语言中字符型常量与变量使用注意事项 字符型常量与变量 (1):字符常量:一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个字符括起来作为字符常量.例如'A' 'b ...
最新文章
- oracle删除日志文件
- CTF-i春秋网鼎杯第一场misc部分writeup
- Two Merged Sequences
- js进阶 13 jquery动画函数有哪些
- .netcore excel导出回车换行_必须掌握的回车键Enter应用技巧,100%干货
- 【干货】联邦学习在腾讯微视广告投放中的实践
- 奥巴马写的c语言正方形,团体程序设计天梯赛-练习集 L1-015 跟奥巴马一起画方块...
- 昭阳E47A每天第一次开机启动速度慢的原因
- 关于js里的那一堆事件
- 《Effective Ruby:改善Ruby程序的48条建议》一第6条:了解Ruby如何构建继承体系
- 自适应控制与鲁棒控制的区别
- 简单理解Binder机制的原理
- 图像识别技术原理和神经网络的图像识别技术
- 测试Python的poplib模块读取邮箱信息
- java gef_【插件开发】—— 12 GEF入门
- isFinite方法详解
- QT去除控件被选中后的焦点虚线框
- 21-4-21 USB接口
- iphone电压测试软件,新款iPhone SE充电兼容性大测试之45W篇
- Java和部门管理的那些事情
热门文章
- Unity -- 入门教程三
- 翻译连载 | JavaScript轻量级函数式编程-第7章: 闭包vs对象 |《你不知道的JS》姊妹篇...
- 理解与使用Javascript中的回调函数
- PostgreSQL在何处处理 sql查询之三十八
- ActionScript 3.0 Step By Step系列(一):工欲其善,先利其器(Flex Builder)
- 金融行业信息系统信息安全等级保护实施指引_中国人民银行发布金融行业网络安全等级保护实施指引...
- 剑指offer 算法 (画图让抽象问题形象化)
- 洛谷 P1082 同余方程(同余exgcd)
- Ubuntu16 安装Jira
- Win7 64位系统,PHP 扩展 curl方法