C语言学习(十四)字符串

1. 字符串
1.1字符数组

char word[] = {‘H’,’e’,’l’,’l’,’o’,’!’};

这是一个字符数组,并不是字符串,也不能用字符串的计算方法进行计算
字符串

1.2字符串

char word[] = {‘H’,’e’,’l’,’l’,’o’,’!’,’\0’};

以0结尾的一串字符,可以当做字符串进行计算;
0标志字符串的结束,在但它 字符串的一部分,计算字符串长度的时候不包含0;
字符串以数组的形式存在,以数组或指针的形式访问(大多数以指针形式);
string.h里面有很多处理字符串的函数。

2.字符串变量

char *str = “hello”;

一个指针str,里面放的是字符串hello。

char word[] = “hello”;

用一个数组进行定义,存放字符串hello。

char line[10]= “hello”;

用一个长度为10的数组存放字符串hello。

2.1字符串处理
C语言字符串是以字符数组的形态存在的;
不能用运算符对字符串进行运算;
通过数组的方式可以遍历字符串;
唯一特殊的地方是字符串自面量可以用来初始化字符数组;
C语言标准库提供了一些字符串计算函数。

2.2字符串常量定义

char* s=”hello,world!”;

s是一个指针,初始化为指向一个字符串常量,由于这个常量所在的地方,实际上是 const char* s,但是C语言编译器不接受const的写法,但是试图对s所指的字符串进行写入会导致严重的后果。
如果需要修改字符串,应该使用数组,写法如下:

char s[] = “hello,world!”;

2.3数组与指针
我们在需要使用一个字符串的话,我们应该使用指针还是数组呢?
数组:这个字符串在这里,作为本地变量,它的空间自动被回收
指针:这个字符串不知道在哪里,通常只读的情况可以只用,作为参数使用,需要进行动态分配空间。
综上,如果要构造一个字符串,使用数组;如果要处理一个字符串,使用指针。

2.4 char*
通常我们可能会说char就是表示字符串,但是这种说法并不确切。
字符串可以表达为char
的形式,但是char不一定是字符串,它的本意是指向字符的指针,可能指向的是字符数组(就像int一样,可能指向单个int,也可能指向一个int数组)。

只有它所指的字符数组有结尾的0,才能说它指向的是字符串。

3. 字符串的输入输出
3.1字符串赋值

char *t=”title”;
char *s;
s=t;

这一段代码实际并没有产生新的字符串,只是让指针s指向了t所指的字符串,对s做的操作就是对t的操作。

3.2字符串输入输出

char word[8];         //定义了一个长度为8个字节的数组
scanf(“%s”,word);
printf(“%s\n”,word);

scanf读入一个单词(到空格、tab或者回车为止),字符串输入输出使用%s。
但是由于不知道读入内容的长度,这里的scanf是不安全的。

常见错误:

char* string;
scanf(“%s”,string);

以为char*就是字符串类型,定义了一个字符串类型的变量sring就可以使用了,由于没有对string进行初始化为0,所以不一定每次运行都会出错,但这并不是说我们可以这么做。

空字符串

char buffer[100]=””;

这是表示一个空字符串
char buffer[]=””;
需要注意,这个数组的长度只有1。

4. 字符串数组
如果需要一个数组来存放一些字符串,我们应该怎么做呢?
① char a[][]

char a[][10]={"hello","world","!"};

表示a[0]中存放的是“hello\0”,a[1]里存放“world\0”…
② char *[]

char *[]={"hello","world","!"};

表示a[0]中有一个指针,指向外面某一个地方,其中存放有“hello\0”, a[1]中有一个指针,指向外面某一个地方,其中存放有“world\0”…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值