#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!”;进行声名!
分享到:
相关推荐
4. **`\'`**仅在字符常量(即单引号括起来的字符)中使用,而在字符串常量(即双引号括起来的字符序列)中则直接使用'即可。 5. **`\?`**在大多数情况下并不需要使用,直接输入问号即可。 6. 转义字符中只能使用小写...
书中的章节涵盖C++哲学、最简单的C++、指针和引用变量、基于对象的编程:类、运算符重载、面向对象的编程:继承、模板、异常控制流、输入和输出、集合:标准模板库、原始数组和字符串、C风格C++以及使用Java和C++:...
这段代码会根据`mark`的值输出对应的字符串,如果`mark`的值既不是`+`、`-`、`*`也不是`/`,则输出"No found"。 3. `if`与`switch`的选择: 当你需要基于一个变量的不同值执行不同操作时,`switch`通常比`if......
11. 字符串与输出:在C++中,`cout`用于输出,`是插入运算符。`cout(a,b);`会输出`b`的值,因为`,`在表达式中起到分隔作用,它的优先级低于`。 12. 赋值运算符:`x=y++`是先赋值再自增,`x++=y++`是错误的,因为...
- `C."0"`:字符串常量,包含终止符,至少占用2字节。 - `D.0.0`:浮点型常量,通常占用8字节,因此是占用存储字节数最多的。 ### 输入数据分隔符 - 多个数据之间的分隔符。 - **选项解析**: - `A.空格或逗号`...
- `"0"`:字符串,占用至少2字节(包括结束符`\0`)。 - `0.0`:浮点数,通常占用4或8字节。 #### 十一、输入多个数据时的分隔符 - **知识点**:从键盘输入多个数据时,通常使用空格或回车作为分隔符。 - **解析*...
C++中的字符串实际上是一维字符数组,通常以空字符'\0'作为结束标志。可以使用`char str[10]`定义一个最多容纳9个字符(加上结束符)的字符串,或者使用字符串字面量如`char str[] = "Hello"`直接初始化。 数组的...
16. 字符串字面量和字符数组:如“char a[]”的定义,以及字符串常量如“”a3_b3_123YN”。 由于文档内容是OCR扫描结果,存在一些不完整和不准确的表述,需要在理解这些基础知识点的基础上,对具体题目的细节进行...
选项C表示字符串“0”,包括结束符在内通常占用2字节;选项D表示浮点数0.0,占用8字节。因此正确答案是D。 ### 输入输出 11. **选择题**:程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用的分隔符为?...
本文将深入探讨如何在Visual Studio 2010环境下使用C++连接到SQL Server 2008数据库,实现数据的CRUD(Create、Read、Update、Delete)操作。 首先,要连接SQL Server 2008,我们需要利用Microsoft提供的ODBC(Open...
- **字符串**:介绍了 C++ 中处理字符串的各种函数和方法,如 std::string 类。 - **指针**:深入理解指针的概念及其在内存操作中的作用。 - **动态内存**:解释了 new 和 delete 运算符的作用,以及如何在运行时...
例如,一个处理字符串操作的文件可以命名为`string_utils.h`。 - **类型命名 (Type Names)** 类型命名应明确指出该类型的目的或功能。例如,一个表示日期的类可以命名为`Date`。 - **变量命名 (Variable Names)*...
- 字符串`"0"`因为包含额外的结束符`\0`,所以占据的空间比单个字符或整数多。 #### 十一、输入多个数据时的分隔符 - **知识点**: 输入多个数据时,通常使用空格或回车作为分隔符。 - **解析**: 在程序中读取多个...
- **推荐书籍**:虽然描述中提到的是C++的书籍,但在学习C语言的基础语法时,可以参考经典的C语言教材如《C程序设计语言》(The C Programming Language) by Brian W. Kernighan 和 Dennis M. Ritchie,或者《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...