字符数组
#include "stdafx.h" #include "iostream" int _tmain(int argc, _TCHAR* argv[]) { char a[3][5]={}; for(int i=0;i<=2;i++) { gets(a[i]); } for(int i=0;i<=2;i++) { puts(a[i]); } system("pause"); return 0; }
1.以上是二维数组的输入与输出// 输入时要注意分行输入
2.对于一维字符数组,有以下几种方法:char a[12];
(1)scanf("%s",str);//识别空格作为字符串的结尾;即若输入hag jhg 则只输出hag;
(2)getchar 逐个对元素赋值;//可以识别 '\n' ,
(3)gets(a);//遇换行符结束,即一按回车就结束,自动在字符串末尾加上 '\0'
(4)char *b; b=a; scanf("%s",a); // 借助字符指针变量实现对数组的赋值;
(5)借助字符串函数strcpy strcpy(a,"iosjhaksjyd");要为'\0’预留空位 否则中断 因为“iosjhaksjyd”是由系统分配内存的 对于字符串常量系统自动在其后加‘\0’
输出均可用printf("%s",a);
其次有for循环可输出
for(int i=0;i<=11;i++)
{
printf("%c",a[i]);
}
3.字符串的结束 ‘\0’(在c语言中,是将字符串作为字符数组来处理的)
对字符数组初始化时,若是依次赋值
如果提供的初值个数与预定的数组长度相同,此时没有‘\0’
如果提供的初值个数小于预定的数组长度,那么系统自动添上‘\0’
如果数组没有定义长度,则‘\0’需自己添加
(字符数组并不要求它的最后一个字符为‘\0’,甚至可以不包含‘\0’)
4.使用字符指针变量和字符数组的比较
(1)字符数组存放的是字符 字符指针变量存放的是地址(字符串的首地址)
(2)可以对字符指针变量赋值 但不能对数组名赋值
char *a;
a="i love china";//char str[14]; str="i love china";(错误 数组名是地址,是常量,不能被赋值,非法)
(4)编译时系统为字符数组分配若干个存储单元,存放各元素的值,而对字符指针变量,只分配4个字节存放指针变量(VC++)
char *a;
scanf("%s",a);(错误 未指明指针指向,可能破坏程序或有用数据,甚至是破坏了系统)
char *a,str[10];
a=str;
scanf("%s",a);(正确 指针有了明确的指向)
(5)指针变量的值是可以改变的 而字符数组名代表一个固定的值(数组首元素的地址),不能改变