关闭

C++基础---字符串(char型字符串)

标签: C++数据类型char型字符串字符数组字符指针
499人阅读 评论(0) 收藏 举报
分类:

1. 字符串(char型字符串)

1.1 C++字符串的定义

  • 字符串:是以空字符(即 ‘\0’)结尾的字符数组
    注:‘\0’是一个空字符标志,它的ASCII码为0。C++中有好多处理字符串的函数,他们都是以空字符为结束标志,如cin和cout,他们在碰到空字符后将会停止输入或输出。

1.2 char型字符串

  • char型字符串:是C语言风格的字符串
  • char型字符串字面值的类型:是char*(字符指针),说得更精准点是const char*。它与字符数组虽然类型不同,但操作是一样的,都表示char型字符串的起始地址
  • char型字符串:又称C-字符串(C-串),是以空字符(即 ‘\0’)作为结束符的字符序列

    char buffer[7] = "Hello!";//正确,可见字符长度为6,加一个空字符,是7,等于数组定义的长度7
    
    char buffer[6] = "Hello!";//错误,可见字符长度为6,加一个空字符,是7,数组越界了
    
    =>注意数组长度必须是可见字符个数加1,因为要保存一个空字符

1.3 字符数组与字符指针的区别

  • 字符数组:数组的形式保存的字符串,数组中的一个元素存放一个字符,字符串中的每个元素都是可以改变的。如:
    (1)赋值方式上:

    char ch[64]; 
    ch = "Hello World";//这种赋值方式错误,不能被赋值
    编译错误提示信息:error C2440: “=”: 无法从“const char [64]”转换为“char [64]”
    
    由于对于字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。
    
    char ch[64] = "Hello World"; //初始化方式成功,只能被初始化

    (2)内存位置上:

    ch[0] = 'h'; ch[4] = 'O';//编译及运行都正常
    =>hellO World
  • 字符指针:指针的形式指向一串字符(该串字符是未命名字符串,被存放在文字常量区),字符串中每个元素的值都是不可以改变的。如:
    (1)赋值方式上:

    char *p; 
    p = "Hello World";      //正确的赋值方式
    <=>等价于
    char *p = "Hello World";//正确的赋值方式

    (2)内存位置上:

    *(p+0) = 'h'; 
    *(p+4) = 'O';//编译正常,运行崩溃
    运行中断提示信息:xxx.exe 中的 0x012d4450 处有未经处理的异常: 0xC0000005: 写入位置 0x012d7838 时发生访问冲突
    =>我们只能读取每个元素的值,但是不能改变它。
    
    cout<< * (p+0) <<"\t"<< * (p+4) << endl;//编译及运行都正常
    =>h o</font>

参考文献:
[1]《C++全方位学习》范磊——第四章、第十四章、第十八章
[2]《C++程序设计教程(第二版)》钱能——第三章
[3] 百度搜索关键字:C++字符串、char型字符串、字符数组、字符指针

0
0
查看评论

C++ 将字符串值赋给CHAR数组

CHAR name[50]; strcpy(name, "tagname");
  • dyz_123456
  • dyz_123456
  • 2016-09-21 17:25
  • 1438

c++学习之char型字符串与函数,char* 做返回值

/*2009-11-14 14:27:33 1.  char型字符串结尾为字符串结束标志'/0'。字符串名是第一个字符的地址,   因此我们将字符串名作为参数传递到函数中时, 其实就是将地址传递到函数中去。   由于字符串的最后一个字符是'...
  • Howard_Liu1314
  • Howard_Liu1314
  • 2012-11-15 23:26
  • 8150

c++输出char型变量与字符串的地址

在c里面如果指针是一个基本数值型 int ,foalt ,long等,如果输出里有 cout 其中ptr是指针的名,则输出的值是指针的地址, 如果是char * (char指针) 则输出的是char指针的值。 在C++中,熟悉int和char型的变量是最基本不过的了,不过,我...
  • u014082714
  • u014082714
  • 2015-05-05 09:44
  • 3366

C++基础---char型字符串库函数

1. char型字符串库函数 1.1 赋值 赋值: strcpy 原型: char* strcpy(char* dest, char* src); 功能: 把从src地址开始且含有 ‘\0’结束符的字符串复制到以dest开始的地址空间。返回指向dest的指针。 说明: src 和 dest所指内...
  • cainv89
  • cainv89
  • 2015-08-16 17:58
  • 1197

C++ char型字符串

1、cin和cout的用法   (1)cin   代码: # include using namespace std; int main() {  chara[20];  cin>>a;  cout  return 0; } 测...
  • CYKsky
  • CYKsky
  • 2014-12-21 22:04
  • 547

c++中关于char型变量与字符串地址的输出

参考至:http://blog.csdn.net/nitpicking/article/details/45364403 在c里面如果指针是一个基本数值型 int ,foalt ,long等,如果输出里有 cout 其中ptr是指针的名,则输出的值是指针的地址, 如果...
  • petersmart123
  • petersmart123
  • 2016-10-12 21:25
  • 975

C解析字符串的存储,char *str和char str[]分析

首先我们需要知道主要的数据存储位置**1、栈(动态存储方式,如局部变量,用完自动销毁) 2、堆(如malloc申请内存,用完需要手动回收内存) 3、静态存储区(静态存储方式,全局变量和静态变量,程序开始就一直存在) 4、常量存储区(里面存放的是常量,不允许修改)**有这些基本知识后,接下来进一...
  • haha1fan
  • haha1fan
  • 2017-06-26 11:10
  • 206

C++ 整形和字符串之间的转换

方法一使用ANSI C 中的sprintf();和sscanf();函数。 格式化符号%%打印出%符号不进行转换。 %c 整数转成对应的 ASCII 字元。 %d 整数转成十进位。 %f 倍精确度数字转成浮点数。 %o 整数转成八进位。 %s 整数转成字符串。 %x 整数转成小写十六进位。 %X 整...
  • shinetzh
  • shinetzh
  • 2017-03-24 22:12
  • 873

将字符串型转化为(Enum)枚举类型

将字符串型转化为(Enum)枚举类型。 例如:现在有个字符串sString,一个枚举EnumName,希望把sString类型转换成EnumName类型格式如下: (EnumName)EnumName.Parse(typeof(EnumName),sString) 实例:有一个下拉式列表,通过...
  • camel0564
  • camel0564
  • 2008-03-18 11:14
  • 1728

C++学习笔记之函数如何返回字符串(char型)

/*函数如何返回字符串(char型)1. 由于函数只能返回一个值, 如何返回多个字符? 如返回一个字符串;只要获得中第一个字符的地址, 就可以依次找到其他字符。 因此只要将字符串第一个字符的地址返回, 就相当于返回了整个字符串。 我们知道char数组的名字是字符串第一个...
  • slf0205
  • slf0205
  • 2009-11-17 15:56
  • 13483
    个人资料
    • 访问:276353次
    • 积分:6241
    • 等级:
    • 排名:第4727名
    • 原创:158篇
    • 转载:0篇
    • 译文:0篇
    • 评论:24条