`
javaFlood
  • 浏览: 10233 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

c/c++下修改字符串常量(mark)

 
阅读更多
  #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!”;进行声名!
分享到:
评论

相关推荐

    c/c++复制字符串到剪粘板中

    c/c++复制字符串到剪粘板中

    C/C++的split分隔字符串

    标准C/C++编写的字符串分隔函数,可以设置分隔字符串,解出字符串存到vector里面。有需要的可以下载

    C#调用C/C++DLL收取中文字符处理

     C/C++字符串一般通过char* 或wchar_t*来表示,char*表示的是ANSCII字符串, wchar_t*表示Unicode字符串,Unicode字符串在C/C++中一个字符占用两个字节,ANSII字符串一个字符占用一个字节(中文占用两个字节), ...

    C语言字符串函数大全C/C++基础 字符串操作大全

    C语言字符串函数大全C/C++基础 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main(void) ...

    C/C++实现字符串拆分

    C/C++实现字符串的拆分截取,输入一个字符串,并输入截取起始位置和截取长度,返回截取到的结果

    格C/C++语言式化字符串

    C/C++语言格式化字符串 %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %0 无符号以八进制表示的整数 %g...

    c++常量字符串编译期加密

    源实现参考网络资源;基于源实现解决了其重入问题。 语言环境:c++14 测试环境:在VS2019、ubuntu(wsl) g++(理论上支持c++14的都可以)

    使用C/C++实现字符串的反转

    使用C/C++实现字符串的反转,不能使用系统函数

    C/C++字符串,字符转数字,数字转字符

    在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串。字符串是以“\0”作为结束符。

    vs code C/C++语法高亮配置文件(C/C++ Themes插件)

    vscode配色插件的c/c++语法高亮配置文件,主题插件为C/C++ Themes。 可以对诸如const、enum、typedef别名、结构体引用等语法高亮进行设置,语言本身的关键字自然不用说了,比one dark pro等热门的插件颜色丰富的多。...

    c/c++字符串操作大全

    c/c++字符串操作大全,基本包含了对字符串的全部操作,简单实用。

    二维码(QRcode)生成算法 C语言/C++源码

    #二维码(QRcode)生成算法 C语言/C++ 源码 1. 根据输入字符串识别编码模式; 2. 根据输入字符串长度选择合适的QRcode版本; 3. 将编码转换为二进制位流表示为数据码字; 4. 使用多项式生成纠错码; 5. 将数据码和...

    Dev-cpp5.4.0及API帮助文档 2018年蓝桥杯C语言/c++

    Dev-cpp5.4.0及API帮助文档 2018年蓝桥杯C语言/c++ 需要的同学可以下载使用

    C语言/C++集成开发环境 Dev-C++

    C语言/C++集成开发环境 Dev-C++。一款优秀的C/C++集成开发软件。

    C语言/C++ 烟花表白代码

    C语言/C++ 烟花表白代码 C语言/C++ 烟花表白代码 C语言/C++ 烟花表白代码 C语言/C++ 烟花表白代码

    编译原理课程设计 词法分析 C语言/c++版

    编译原理课程设计之一用编程语言实现词法分析,用C++实现 注释清楚详细,程序风格良好 /*目前实现的功能有: */ /* 0.课程要求的词法分析基本功能 */ /* 1.识别用户定义的初次定义的变量还是已经定义的变量还是错误...

    详解C++中十六进制字符串转数字(数值)

    详解C++中十六进制字符串转数字(数值) 主要有两个方法,其实都是对现有函数的使用:  方法1: sscanf()  函数名: sscanf 功 能: 从字符串格式化输入 用 法: int sscanf(char *string, char *format[,...

    C语言/C++基础之爱心源码

    C语言/C++基础之爱心源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    c/c++中文帮助文档(API)

    c/c++中文帮助文档(API),包含c和c++所有的库函数

    C/C++实现字符串模糊匹配

    需求:  准入授权配置文件有时候分了好几个维度进行配置,例如 company|product|sys这种格式的配置: 1.配置 “sina|weibo|pusher” 表示... 面对这个需求我第一时间想的是如何设计模式串,如何快速实现功能,因为我现

Global site tag (gtag.js) - Google Analytics