博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++下字符串常量的修改
阅读量:4134 次
发布时间:2019-05-25

本文共 1110 字,大约阅读时间需要 3 分钟。

请在(且只能在TC2.0)中运行下面代码,先不要看结果,想想会得到什么:   
  #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;   
  }   
  输出结果是:"-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[0]   =   '-';   
          puts(   szStringB   );   
          return   0;   
  }
  
  没问题了吧。   
  OK,最后请记住:需要修改字符串,那么用char szString[]=“Hello,world!”;进行声名!

转载地址:http://pdsvi.baihongyu.com/

你可能感兴趣的文章
C++模板
查看>>
【C#】如何实现一个迭代器
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
VUe+webpack构建单页router应用(一)
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
Spring MVC中使用Thymeleaf模板引擎
查看>>
PHP 7 的五大新特性
查看>>
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
Mysql复制表以及复制数据库
查看>>
Linux分区方案
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>