C 字符串各种用法讲解
创始人
2024-06-22 10:50:42
0

大家知道,C++编程语言中,对于字符串的操作是一个比较基础而且重要的操作技巧。C++字符串一般情况下可以通过以下两种形式进行表示,分别为;传统字符串,以及字符数组这两种。#t#

1.C++字符串之 传统字符串

a) char ch1[] = {“liangdiamond”}

b) char ch2[] = {“hello world”}

其中关于传统字符串,有几个常用的函数

a) strcpy()函数

b) strcat()函数

c) strlen()函数

d) strcmp()函数

e) strlwr()函数:大写变为小写

f) strupr()函数,小写变为大写

2. C++字符串之字符数组

从表面上看,一个字符串是一个字符数组,但在c++语言中,它们不同。字符串是以’\0’结束的字符型数组。下面这段代码展示字符串和字符数组的区别:

  1. #include < iostream> 
  2. using namespace std;  
  3. int main()  
  4. {  
  5. char a[] = {"hello"};  
  6. char b[] = {'h','e','l','l','o'};  
  7. int la = 0;  
  8. int lb = 0;  
  9. cout< < "The length of a[]:"< < sizeof(a)/sizeof(char)< < endl;  
  10. cout< < "The length of b[]:"< < sizeof(b)/sizeof(char)< < endl;  
  11. system("Pause");  
  12. return 0;  

 

可以修改程序:

  1. #include < iostream> 
  2. using namespace std;  
  3. int main()  
  4. {  
  5. char a[] = {"hello"};  
  6. char b[] = {'h','e','l','l','o','\0'};  
  7. int la = 0;  
  8. int lb = 0;  
  9. cout< < "b="< < b< < endl;  
  10. cout< < "The length of a[]:"< < sizeof(a)/sizeof(char)< < endl;  
  11. cout< < "The length of b[]:"< < sizeof(b)/sizeof(char)< < endl;  
  12. system("Pause");  
  13. return 0;  

 

但是数组名就是数组的首地址,所以数组名本身就可以理解为一个指针,只不过,它是指针常量,所谓指针常量,就是指针不能改变所指向的地址了,但是它所指向的地址中的值可以改变。
例如:

  1. #include < iostream> 
  2. using namespace std;  
  3. int main()  
  4. {  
  5. char a[] = {"hello"};  
  6. char b[] = {'h','e','l','l','o','\0'};  
  7. a++;  
  8. system("Pause");  
  9. return 0;  

编译报错。

C++字符串中字符数组和字符指针虽然在形式上很接近,但在内存空间的分配和使用上还是有很大差别。数组名不是一个运行时的实体,因此数组本身是有空间的,这个空间由编译器负责分配。而指针是一个变量(运行时实体),它所指向的空间是否合法要在运行时决定。

  1. #include < iostream> 
  2. using namespace std;  
  3. int main()  
  4. {  
  5. char s[] = "abc";  
  6. char* p = "abc";  
  7. s[0] = 'x';  
  8. cout< < s< < endl;  
  9. //p[0] = 'x'; 编译报错  
  10. cout< < p< < endl;  
  11. system("Pause");  
  12. return 0;  

S的地址和p所指向的地址并不是一个地方,可以推断0x00417704是常量区。所以貌似不能改。用反汇编其实看的更清楚一点。指针好就好在它能指向内存,不是ROM 区的好似都能改。

以上就是对C++字符串的相关介绍。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...