c/c++的字符数组

字符数组

字符数组的两种初始化方式

1

char arr[]={'a','b','c','\0';
//这种方式,字符数组必须以\0作为结束标识符来声明

2

char arr[]={"abc"} // 这种初始化方式会默认在末尾加\0,[]里如果要填数字,应该不小于4

字符数组的输入

1

char arr[520];//要先定义长度
scanf("%s",arr);//这里不需要加取址符&
char arr[520];
cin >> arr;

但是这种方式有一个缺陷,例如我输入 hallo world
请添加图片描述

请添加图片描述
它无法打印出后半部分的world 为什么呢?
因为中间存在空格
空格的作用和回车就相当于一个间隔符,录入之前的数据即hallo
那如果在world后加一个空格呢 是不是就能把world也打印出来呢 答案是不能
因为只有一个scanf。

2

为了解决上面这个问题
我们可以使用gets()函数

char arr[1024];
gets(arr);
cout << str << endl;

gets语句将空格作为字符看待 只接受回车命令。

虽然用 gets() 时有空格也可以直接输入,但是 gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,gets 无法检测到这个问题,就会发生内存越界。
我们可以用fgets函数

char arr[1024];
fgets(arr,1024,stdin);//第三个参数表示从何种流中读取,可以是标准输入流 stdin,也可以是文件流,即从某个文件中读取。

那么在c++中我们也可以使用cin.getline()函数

char arr[1024];
cin.getline(arr,1024);

字符数组的输出

#include <iostream>

using namespace std;

int main(){
	char arr[1024];
	cin.getline(arr,1024);
	cout << arr + 1 << endl;//字符数组可以根据内存地址直接从头到尾输出
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值