`
javaFlood
  • 浏览: 10529 次
  • 性别: 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++转义字符大全.docx

    4. **`\'`**仅在字符常量(即单引号括起来的字符)中使用,而在字符串常量(即双引号括起来的字符序列)中则直接使用'即可。 5. **`\?`**在大多数情况下并不需要使用,直接输入问号即可。 6. 转义字符中只能使用小写...

    《C++ for Java Programmers》高清完整英文PDF版

    书中的章节涵盖C++哲学、最简单的C++、指针和引用变量、基于对象的编程:类、运算符重载、面向对象的编程:继承、模板、异常控制流、输入和输出、集合:标准模板库、原始数组和字符串、C风格C++以及使用Java和C++:...

    C++ - switch 函数 - 判断

    这段代码会根据`mark`的值输出对应的字符串,如果`mark`的值既不是`+`、`-`、`*`也不是`/`,则输出"No found"。 3. `if`与`switch`的选择: 当你需要基于一个变量的不同值执行不同操作时,`switch`通常比`if......

    C++练习题 C++练习题

    11. 字符串与输出:在C++中,`cout`用于输出,`是插入运算符。`cout(a,b);`会输出`b`的值,因为`,`在表达式中起到分隔作用,它的优先级低于`。 12. 赋值运算符:`x=y++`是先赋值再自增,`x++=y++`是错误的,因为...

    C++历年真题及答案

    - `C."0"`:字符串常量,包含终止符,至少占用2字节。 - `D.0.0`:浮点型常量,通常占用8字节,因此是占用存储字节数最多的。 ### 输入数据分隔符 - 多个数据之间的分隔符。 - **选项解析**: - `A.空格或逗号`...

    C++笔试考试复习题

    - `"0"`:字符串,占用至少2字节(包括结束符`\0`)。 - `0.0`:浮点数,通常占用4或8字节。 #### 十一、输入多个数据时的分隔符 - **知识点**:从键盘输入多个数据时,通常使用空格或回车作为分隔符。 - **解析*...

    C++程序设计:第7章_数组2.ppt

    C++中的字符串实际上是一维字符数组,通常以空字符'\0'作为结束标志。可以使用`char str[10]`定义一个最多容纳9个字符(加上结束符)的字符串,或者使用字符串字面量如`char str[] = "Hello"`直接初始化。 数组的...

    南昌大学C++习题答案题库.pdf

    16. 字符串字面量和字符数组:如“char a[]”的定义,以及字符串常量如“”a3_b3_123YN”。 由于文档内容是OCR扫描结果,存在一些不完整和不准确的表述,需要在理解这些基础知识点的基础上,对具体题目的细节进行...

    C++面向对象程序设计的选择题

    选项C表示字符串“0”,包括结束符在内通常占用2字节;选项D表示浮点数0.0,占用8字节。因此正确答案是D。 ### 输入输出 11. **选择题**:程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用的分隔符为?...

    C++连接SQL SERVER2008数据库

    本文将深入探讨如何在Visual Studio 2010环境下使用C++连接到SQL Server 2008数据库,实现数据的CRUD(Create、Read、Update、Delete)操作。 首先,要连接SQL Server 2008,我们需要利用Microsoft提供的ODBC(Open...

    c plusplus-tutorial

    - **字符串**:介绍了 C++ 中处理字符串的各种函数和方法,如 std::string 类。 - **指针**:深入理解指针的概念及其在内存操作中的作用。 - **动态内存**:解释了 new 和 delete 运算符的作用,以及如何在运行时...

    Google C++ Style Guide中文版

    例如,一个处理字符串操作的文件可以命名为`string_utils.h`。 - **类型命名 (Type Names)** 类型命名应明确指出该类型的目的或功能。例如,一个表示日期的类可以命名为`Date`。 - **变量命名 (Variable Names)*...

    C++面向对象程序设计练习卷

    - 字符串`"0"`因为包含额外的结束符`\0`,所以占据的空间比单个字符或整数多。 #### 十一、输入多个数据时的分隔符 - **知识点**: 输入多个数据时,通常使用空格或回车作为分隔符。 - **解析**: 在程序中读取多个...

    c语言学习的顺序,步骤

    - **推荐书籍**:虽然描述中提到的是C++的书籍,但在学习C语言的基础语法时,可以参考经典的C语言教材如《C程序设计语言》(The C Programming Language) by Brian W. Kernighan 和 Dennis M. Ritchie,或者《C ...

    C语言精典版本C程序设计语言

    C程序设计语言C语言精典版本 目 录 译者序 序 第1版序 前言 第1章 基本概念 1.1 入门 1.2 变量与算术表达式 1.3 for语句 1.4 符号常量 1.5 字符输入输出 1.5.1 文件复制 1.5.2 字符计数 1.5.3 行计数 1.5.4...

Global site tag (gtag.js) - Google Analytics