c++ char*初始化_[零食时间]C/C++ 字符串全家桶(字符串表示/定义、字符串输入输出、易错点等)上半桶...

停课不停学

我们在努力(来与我们一起努力吧 公众号:同年新月)

C/C++ 字符串知识汇总

01

字符串是以空字符'0'结尾的char类型数组

表示字符串

① 字符串字面量(字符串常量)

用双引号括起来的内容称为字符串常量。字符串的生存期是整个程序。

注意:如果要在字符串内部使用双引号,必须在双引号前面加上一个反斜杠(")

字符串常量属于静态存储类别,这说明被使用的字符串只会在存储器中存储一次。而对于用双引号括起来的内容视其类型是char*,即指向字符串的指针。

printf("%s","TNXY2020");//输出TNXY2020

或者

#define A "TNXY2020" //可以用A代替“TNXY2020”

②字符串数组和其初始化

定义字符串数组时一定要保证有充足的空间存储,(不要忘记'0')。

char str[10]="TNXY2020";//这时未被初始化的字符数据自动初始化为'0'

或者不声明大小,让编译器计算

char str[]="TNXY2020";//大小为9

注:必须有赋值并且是定义时才可以省略大小。

注意:声明数组时,数组大小必须是可求值的整数。

指针表示法创建字符串:char* ptr="TNXY2020";

③数组和指针

数组形式:char arr[]="TNXY2020";

编译器会为左边的数据分配9个字符大小的空间,而右边的数据存储在静态内存中,两份拷贝。数组名是字符串的首地址的别名,常量(比如arr++;是错误的)。而数组的内容可以改变。

指针形式:char ptr="TNXY2020";

编译器会为左边数据分配一个指针的空间,右边分配9个字符大小的空间,并让指针指向右边的字符串,是变量。但是右侧的数据是常量,所以指针指向的内容不可以改变。


02

字符串输入

1.分配空间

-假设这样:

char *name;

scanf("%s",name);

因为scanf()要把信息拷贝至参数指定的地址上,而此时该参数是一个未初始化的指针,指针可能指向任何地方,而没有空间,程序会异常终止。(大多数程序猿会认为出现这种情况很搞笑,但仅限于评价别人的程序时...)

最简单的方法是,在声明的时候显式声明为确定大小的数组。 或者用malloc()等函数分配空间。

2.不幸的scanf()和gets()函数

scanf("%s" , )只能读取一个单词。从第一个非空白字符开始读取,直到下一个空白字符(空行、空格、制表符或换行符)结束。如果指定了字段宽度,如%10s,scanf()将读取10个字符或读到第一个空白字符停止,同时指定宽度可以起到防止溢出的效果。

gets(字符串地址)读取整行输入,直至遇到换行符,然后丢弃换行符,存储其他字符,并在这些字符的末尾添加一个空字符。缺陷:不能知道输入行的大小,可能会出现缓冲区溢出。

gets()的替代品以及输出的实现后天再总结吧,明天一大早有英语课直播(苦逼....)

c4fe88f0a6afb7a8326cec919277b993.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值