C语言中字符串详解

一.定义字符串

c语言虽然不像其它高级语言一样有内置的字符串类型 ,但是却有字符串这个概念,即字符串常量。由双引号引起来的0个或者多个字符构成的序列被称作字符串常量。比如:

   "hello!" ,"1593\a\147"   " "

字符串的结束标志是一个'\0'的转义字符,他不计入字符串长度。

二.字符数组

1.定义

用来存放字符量的数组成为字符数组。在数组元素中一个元素内存放一个字符。定义字符数组的方法与定义字符型数组的方法类似。

其定义的一般形式是:char数组名[数据长度]

例如:char c[10];

2.初始化

字符数组的初始化与数值型数组初始化没有本质区别,但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化。

(1)用字符常量逐个初始化数组。例如:

char a[]={'a','b','c','d','f'};这五个字符依次赋值给a[0]~a[4]这五个元素。此时a数组的长度自动定为5.

(2)字符串常量初始化数组,例如:

char a[]={'a','b','c','d','f'}可写为char a[]={"abcdf"}或去掉{}写为char a[]="abcdf”;

注意:此时数组的长度不是9,而是10.因为字符串常量的最后有系统加上一个‘\0’

3.输入输出

字符数组的输入(1)用getchar()或scanf()的'%c'格式符对数组进行字符赋值。

对于数组a[10]:用getchar()赋值:for(i=0;i<10;i++)a[i]=getchar();用scanf()赋值:for(i=0;i<10;i++)scanf("%c",&a[i]);

(2)用scanf()的'%s'格式对数组赋值。

还是对于数组a[10]:scanf("%s",a);或scanf("%s“,&a[0]);输入”C program“并回车时,a数组会自动包含一个以”\0“结尾的字符串”C program“。

gets(str)与scanf("%s", str)的区别:

gets(str)允许输入的字符串含有空格
scanf("%s", str)不允许含有空格

注意:由于scanf()和gets()无法知道字符串s大小,必须遇到换行符或读到文件结尾为止才接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况,所以我们在定义char型数组时,应该确保其空间足够大。
 

字符数组的输出(1)用putchar()或printf()的‘%c’格式符对数组进行字符赋值。

例如,对于数组a[10]:用putchar()赋值:for(i=0;i<10;i++)a[i]=putchar();用printf()赋值:for(i=0;i<10;i++)printf("%c",a[i]);输出结果为:c program 

(2)用printf()的'%s'格式对数组赋值。

还是对于数组a[10];printf("%s",a);输出结果为:c program

4.strlen()

功能:计算指定指定字符串的长度,不包含字符串结束符‘\0’

char str[] = "helloworld";
	printf("%d\n", strlen(str));
	printf("%d", sizeof(str) / sizeof(str[0]));

结果表示为

sizeof(...)和strlen(...)的区别

 sizeof(...)是运算符,参数可以是数组、指针、类型、对象、函数等。具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:
    数组——编译时分配的数组空间大小;
    指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
    类型——该类型所占的空间大小;
    对象——对象的实际占用空间大小;
    函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。
 

它的功能是:获得保证能容纳实现所建立的最大对象的字节大写。

strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
    它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘不要秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值