字符数组是数组元素为char类型的一种数组。凡是适合数组的定义和赋值,也都适合于字符数组。由于C语言没有提供字符串类型,字符串一般用一维字符数组来存放,而二维字符数组可以存放多个字符串。
字符数组定义的一般格式为:
l 一维字符数组:char 数组名[整型常量表达式];
l 二维字符数组:char 数组名[整型常量表达式1][整型常量表达式2];
如: char c[10],c1[2][15];
字符数组的初始化与赋值与一般数组的很相似,但也有其特殊之处。
1.一维字符数组的初始化
如下例:
char c[5]={ ' a', 'b', 'c', 'd', 'e'};
这是最基本的初始化方式。在初始化时要注意数组元素存放的是字符,因此用单引号而不是用双引号,如下面的初始化:
char c[5]={ " a","b","c","d","e"}; /*错误初始化方式*/
这时每个元素的初值变成了字符串,这显然是错误的。
当字符数组用来存放字符串时,要注意字符串中包含了一个字符串结束标志'\0',这个结束标志也要占用一个单元。其初始化方式有以下几种:
l 用{ }列出初值列表实现。如:
char s1[5]={ 'a', 'b', 'c', 'd', '\0'};
s1中存放的是字符串"abcd"
l 用字符串常量直接初始化。如:
char s1[5]= "abcd";
这种方式初始化时,一定要注意数组的长度和字符串的长度的关系:字符串长度不包含结束符'\0',数组长度要把结束符算在其内,因此数组的长度要大于字符串的长度。如下面的操作是错误的:
char s1[5]= "abcde"; /*数组的空间不够存放字符串*/
l 省略数组的大小,进行初始化。这是根据初值中字符的个数确定数组的长度。如:
char s2[]="hello";
它等价于 char s2[6]= "hello";
2.二维字符数组的初始化
与其它二维数组初始化一样,有以下几种方式:
l 用初值列表方式。如:
char s3[2][4]={{ ' a', 'b', 'c', '\0'},{' m', 'n', 'l', '\0'}};
l 用字符串常量方式。如:
char s3[2][4]={ " abc"," mnl"};
l 省略第一维大小的方式来初始化。如:
char s3[][4]={{ ' a', 'b', 'c', '\0'},{' m', 'n', 'l', '\0'}};
或 char s3[][4]={ " abc","mnl"};
根据分行赋值的大括号{}的个数或常量字符串的个数确定第一维的大小为2。
3.赋值
与一般数组赋值相同,不能将一个字符串直接赋值给一个数组名,只能对字符数组的元素逐个赋值。如:
char s4[6];
要给它赋值为"hello",只能如下方式:
s4[0]= 'h',s4[1]= 'e',s4[2]= 'l',s4[3]= 'l',s4[4]= 'o',s4[5]= '\0';
而不能为:s4="hello";
也不能是:s4[6]= "hello";
注意:C语言中,无论是字符数组还是数值型数组在程序中只能给它的元素赋值。
其它类型的数组元素在输入输出时,只能逐个元素实现输入输出,但用字符数组来存放字符串时,可以进行整体的输入输出。
1.一维字符数组的输入输出
利用scanf()函数和printf()函数来实现输入输出时,通过在格式字符串中使用格式说明“%s”来实现。如:
例4.1 分析下面程序运行结果。
main( )
{
char s[7];
printf(" please input a string: ");
scanf(" %s",s);
printf("the string is: %s. ",s);
}
输入及运行结果为:
please input a string: hello↙
the string is: hello.
在输入时,已将字符串"hello"存放到了数组s中了。
注意:
? 在scanf()函数中使用格式说明“%s”时,该函数对应的输入数据项中直接用数组名,因为在C语言中数组名代表该数组在内存中的起始地址。
? 要求输入的字符串长度要小于数组的长度,因为系统会自动在输入的字符串后面加上字符串结束标志'\0'。
? 在输入字符串时,输入的字符串是以空格、Tab键或回车等空白字符作为字符串输入的结束标志,后面的字符将作为另外输入项的内容。如:
例4.2 分析下面程序运行结果。
main( )
{
char name[20];
printf("please input name: ");
scanf(" %s",name);
printf("the name: %s.\n",name);
}
程序输入及运行结果为:
please input name:zhang san↙
the name: zhang
该程序输入的虽然是" zhang san",但由于zhang后面有空格,故输出为" zhang",亦即数组name中的值为:" zhang"。
? 利用“%s”格式说明输出字符串时,printf()函数的对应输出项应直接给出数组名,而不能是数组元素,因为数组元素的类型为char类型,而使用的格式说明为“%s”,并且要求用printf()函数输出的字符数组,必须以' \0'作为结尾。
当然,字符串也可以通过scanf()函数和printf()函数利用格式说明“%c”来实现输入输出,但这时只能逐个字符的进行。还可以使用getchar()和putchar()函数来实现字符数组中单个字符的输入输出。
2.二维字符数组的输入输出
二维字符数组的每一行可以用来存放一个字符串,因此可以将二维字符数组看成是一个一维数组,数组中的元素为字符串,即被看作是字符串数组。如:
char ss[3][10];
数组ss可以被看作是用来存放3个字符串的字符串数组,每个字符串的长度不超过9。这时,对数组中字符串的引用,只使用第一个下标。即:
ss[0]:表示第一个字符串的首地址;
ss[1]:表示第二个字符串的首地址;
ss[2]:表示第三个字符串的首地址;
在输入输出时,通过使用“%s”格式说明将非常方便,例如:
例4.3 分析下面程序运行结果。
main( )
{
char ss[3][10];
int i;
printf("please input strings:\n");
for(i=0;i<3;i++)
scanf(" %s",ss[i]);
for(i=0;i<3;i++)
printf(" the No.%d string: %s\n",i+1,ss[i]);
}
数据输入及运行结果为:
please input strings:
Mary John Smith↙
the No.1 string: Mary
the No.2 string: John
the No.3 string: Smith
注意:
l 在scanf()和printf()函数中输入输出字符串时,不能使用ss[i][j],因为ss[i][j]表示是字符元素而不是表示字符串。
l 对字符串数组输出时,如上例ss[i]本身就代表第i行的字符串得首地址,故不能在前面再加“&”。
相关推荐
1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { abc, def, gbk }; for(int i = 0 ; i < strlen(name); i ++){ printf(%s\n, *(name+i)); //printf(%s\n, name[i]); } ...
实现将unsigned char数组转成string型,用16进制显示。 实现将unsigned char数组转成string型,用16进制显示。
主要介绍了Java中char数组(字符数组)与字符串String类型的转换方法,涉及Java中toCharArray与valueOf方法的使用技巧,需要的朋友可以参考下
main.c为测试文件,调用tools.h中的函数: char * MultiCombine(char *a[],int num); 编译方法:gcc -o test main.c tools.c
问题来源: 在写二叉树序列化与反序列化时发现序列化函数为...第一种:定义一个char数组,数组长度为stringlength+1,将string的内容依次赋值给char数组,最后加上’\0′ ,然后返回char数组名就行了。 第二种:将st
本章要点控制程序流!跳出循环伪代码char类型数组使用带返回值的函数函数接口和函数实现。
char short int long float double 转换成byte数组
本文实例汇总了C语言中qsort函数的常见用法,非常具有实用价值。分享给大家供大家参考。具体分析如下: C语言中的qsort函数包含在的头文件里...二、对char类型数组排序(同int类型) char word[100]; int cmp( cons
C#各种数据类型转换,字符串 转换 char数组,char数组 转换 字符串,byte数组 转换 字符串,字符串 转换 byte数组 注意转换出来会使原来的bytearray长度变短,字符串 转换 byte数组 长度为传如的长度,将字符串编码为Base...
TIA博途_S7-1200中将BYTE类型的数据转换成char类型的具体方法和注意事项
参数char* s取出数据的流向的char类型数组指针,streamsize n表示数组的长度 #include using namespace std; int read()//read函数主体部分 { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9') { if...
CString型转char型方法总结,解决数据类型转换问题。CString型与char型相互转换。
实验6-1数据拷贝程序将一个尺寸为256的unsigned char数组中的数据(其中数据依次为0-255),分别逆序复制到类型为int, double的两个动态缓冲区中,并分别将两个缓冲区的起始地址及其中的数据、缓冲区的最后一个单元...
将图像(* .gif,*。...png)转换为无符号字符数组。 该软件是用Java编写的。 专用于具有240x320分辨率显示的Embedded Artists开发板的开发项目。 该程序是免费软件,您可以出于教育目的重新分发和/或修改它。
C#中char[]与string之间的转换 string 转换成 Char[]
C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类 数据类型,int指针类型,double指针类型,char指针类型等等。 通常,我们用int类型保存...
server使用SocketServer1.Socket.Connection[0].SendBuf(char类型的数组,信息长度); SocketClient1.Socket.SendText(Edit1.Text); 接收信息 clien使用SocketClient1.Socket.ReceiveBuf(char类型的数组,信息...
(UNICODE 与非UNICODE导致的问题),CString,TCHAR和CHAR类型的互转.docx 没有定义UNICODE,所以它里面的字符串就是简单用" "就行了,创建工程的时候包含了UNICODE定义,就必须对TCHAR和char进行转换。
C++和C#之间使用不同数据类型,当使用不同的语言实现时就需要转换数据类型