学习笔记10

字符数组

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

word[0]   H

wors[1]  e

word[2] l

word[3] l

word[4] o

word[5] !

字符数组不是字符串

字符串为

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

word[0]   H

wors[1]  e

word[2] l

word[3] l

word[4] o

word[5] !

word[6] \0


字符串

以及0(整数0)结尾的一串字符

0和'/0'是一样的,但是和'0'不同

0标志字符串的结束,但它不是字符串的一部分

计算字符串长度的时候不包括这个0

字符串以数组的形式存在,以数组或指针的形式访问

更多的是以指针的形式

sring.h 里有很多处理字符串的函数

字符串常量

如 "hello"

"hello"会被编译器变成一个字符数组放在某处,这个数组的长度是6,结尾还有表示结束的0


c语言的字符串是以字符数组的形式存在的

不能运用运算符对字符串做运算

可以通过数组的方式遍历字符串

唯一特殊的地方是字符串表面量可以用来初始化字符数组

标准库提供了一些字符函数

char * s ="hello,world";

s是一个指针,初始化为一个字符串常量

由于这个常量所在到地方,所以实际上s是const char *s,但编译器不接收带const的写法

如果对s所在的字符串做写入会导致严重后果

指针无法定义字符串

如果要修改字符串可以使用数组

 


char * str ="hello,";

char world[] ="hello,";

数组:

这个字符串在这里

作为本地变量空间自动被回收

指针:

这个字符串不知道在哪里

处理参数

动态分配空间


字符串可以表示为 char* 的形式

char*不一定是字符串

其本意是指向字符的指针,可能指向的是字符的数组(就像int*一样)

只有当它所指的字符数组的有结尾的0的时候,才可以说它所指的是字符串


字符串的输入输出

char string[8];

scanf ("%s",string);

printf ("%s",string);

scanf 读入一个单词(到空格,tab或回车为止)

scanf并不是安全的,因为不知道要读入的内容的长度

 

安全的输入

char string[8];

scanf("%7s",string);

 

在%和s之间的数字表示最多允许读入的数量,这个数字应该比数组的大小小一


常见的错误

chat*string;

scanf("%7s",string);

以为char*是字符串类型,定义了一个字符串类型变量string就可以直接使用了

由于没有对string初始化为0,所以不一定每一次运行都出错

空字符串

char buffer[100]=" ";

这是一个空字符串,buffer[0]=='\0'

char buffer[]=" ";

这个数组的长度只有1

char  a[][10]

即有若干行,每一行有10个字符的位置

char *a[10]

有若干行,每一行指向一个地址

char**a

a是一个指针,指向另一个指针,那个指针指向一个字符(串)

程序参数

int main(int argc,char const *argv[])

argv[0]是命令本身

当使用Unix的符号链接时,反应符号链接的名字


int putchar(int c);

向标准输出写一个字符

返回写了几个字符,EOF(-1)表示写失败

i

int getchar(void);

从标准输入读入一个字符

返回类型是int,是为了返回EOF(-1)

Windows→Ctrl-Z

Unix→Ctrl-D


string.h中包含的函数

strlen,strcmp,strcpy,strcat,strchr,strstr

 

strlen

size_t strlen(const char*s);

返回s的字符串长度(不包括结尾的0)

strcmp

int strcmp(const char*s1,const char*s2);

比较两个字符串

0:s1==s2

1 s1>s2

-1 s1<s2

strcpy

char * strcpy(char * restrict dst, const *restrict src);

把src的字符串拷贝到dst

restrict表明src和dst不重叠

返回dst是为了能链起来代码

复制一个字符串

char *dst = (char*)malloc(strlen(src)+1);

strcpy(dst, src);

字符串中找字符

char * strchr(const char *s, int c);

char * strrchr(const char *s, int c);

返回NULL表示没有找到

字符串中找字符串

 

char * strstr(const char *s1, const char *s2);

char * strcasestr(const char *s1, const char *s2);

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值