字符数组
字符数组的两种初始化方式
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;
}