字符串定义方法

一、字符数组

对字符数组,有以下几种定义方法:

  1. char str[]="12345";
    

或给字符串加上大括号:

  1. char str[]={"12345"};
    

这种方法定义时,系统会自动在字符串的末尾加上字符串结束符,即 ‘\0’,

  1. char str[10]={'1','2','3','4','5'};
    

这种方法定义时,系统会自动从未初始化的元素开始,将之后的元素赋为\0,如上面的数组str中的元素实际上是:‘1’,‘2’,‘3’,‘4’,‘5’,’\0’,’\0’,’\0’,’\0’,’\0’

  1. char str[]={'1','2','3','4','5'};
    

这种方法定义时,系统不会自动在字符串的末尾加上字符串结束符;

此时用sizeof()函数可以正确求出其所占的内存大小;但用strlen()函数不能正确求出其长度,因为strlen是通过\0判断字符串结束的。

所以,采用该方法定义时,一般人为地加上\0,即char str[]={‘1’,‘2’,‘3’,‘4’,‘5’, ‘\0’};

易错情况:

  1. char a[10]; a[10]="hello";//一个字符怎么能容纳一个字符串?况且a[10]也是不存在的!
    
  2. char a[10]; a="hello";//字符数组不能再次赋值(注意:但不能简单地把数组名理解为指向数组首地址的指针常量)。
    
  3. char a[5] = {'h','e','l','l','o'}; //元素个数等于(或大于)数组长度,系统不会自动添加'\0',可能会出现乱码
    

还有:不能使用关系运算符“==”来比较两个字符串,只能用strcmp() 函数来处理。

二、字符指针

只能采用字符串常量的方式初始化:

  1. char *str3="12345";
    

注意:字符指针可以用字符串常量初始化和赋值;

即:

  1. char *str3;str3="12345";
    

也是可以的

此时也可以用str3[4]的形式访问其中的元素,如cout<< str3[4];就会输出str指向的字符串的第四个元素。

该方法也是自动加上了字符串结束符的。
以下是例程:
在这里插入图片描述

原创文章 29 获赞 62 访问量 10万+

猜你喜欢

转载自blog.csdn.net/mahoon411/article/details/104636830