C语言字符数组学习笔记

字符数组

不是字符串,因为不能用字符串方式做计算

例如char word[] ={'h''e' 'l' 'l' 'o' '!'};

但是当加上'\ 0'后它是一个字符串

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

字符串

以0结尾的一串字符,0或者'\ 0'是一样的,但是和'0'不同('0'是十进制的48),0标志字符串的结束,但它不是字符串的一部分,计算字符串长度的时候不包含这个0

字符串以数组的形式存在,以数组或指针的形式进行访问,更多是以指针形式,string.h里有很多处理字符串的函数

字符串变量

以下含义分别为

char *str ="Hello";//(str的指针指向字符数组,其内容为hello)

char word[ ]="Hello";//有个数组内容为hello

char line[10] ="Hello";有10个字节的数组line中有hello

字符串常量 双引号引入内容

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

两个相邻的字符串常量会被自动连接起来

字符串

c语言的字符串是以字符数组的形态存在的,不能用运算符对字符串做运算,通过数组的方式可以遍历字符串

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

以及标准库提供了一系列字符串函数

用数组还是指针

char * str ="Hello";

char word[] ="Hello";

上述分别展示了数组和指针的写法

使用数组时表示这个字符串在这里,作为本地变量空间自动被回收

使用指针时这个字符串不知道在哪里,可以用来处理参数或者动态分配空间//malloc

构造字符串--数组

处理字符串--指针

char*是字符串吗

不一定,本意是指向字符的指针,可能指向的是字符的数组

只有他所指的字符数组有结尾的0,才说所指的是字符串

字符串的输入输出

举例 char string[8];

​ scanf("%s",string);

​ printf("%s",string);

scanf读入一个单词到空格,tab或回车为止,但是scanf不安全,不知道要读入的长度

***安全的输入:

​ char string[8];

​ scanf("%7s",string);

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

***常见错误

误把char* 当作字符串类型,定义一个字符串类型的变量string就开始使用,由于没有对string初始化0,不一定能每次运行

空字符串"" char butter[100]="";

char butter[]="" 这个数组长度只有1

字符串数组

char**a a是一个指针,指向另一个指针,那个指针指向一个字符或字符串

单字符输入输出

putchar

int putchar(int c);向标准输出写一个字符,返回写了几个字符,EOF(-1) 表示写失败

getchar

int getchar(void);从标准输入读入一个字符,返回类型是int是为了返回EOF(-1)

windows-->Ctrl-Z Unix-->Ctrl-D

在电脑和编写程序之间有一个shell,当你输入Ctrl d时shell会在程序后面输入-1,结束程序,当你输入Ctrl c时shell会关闭程序

头文件string.h包含的函数

strlen size_t strlen(const char*s);//const的作用是告诉你字符串有多长,并不会修改字符串

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

strcmp 比较两个字符串,int strcmp(const char* s1,const char *s2);

返回0 s1==s2

​ 1 s1>s2

​ -1 s1<s2

strcpy 把src的字符串拷贝到dst ,restrict表明src和dst不重叠,返回dst,为了能链起代码来

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

我们经常拿strcpy进行复制一个字符串

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

strcpy(dst,src);

用strcpy举例子其中一种

include<stdio.h>

include<string.h>

char *mycpy(char *dst,const char *src){

int idx=0;

while(src[idx]){

dst[idx]=src[idx];

idx++;}

dst[idx]='\0';

return 0;}

如果用指针

include<stdio.h>

include<string.h>

char* mycpy (char *dst ,const char *src){

char *ret=dst;

while(*dst++ = *src++)

;

*dst ='\0';

return 0;}

strcat

strchr在字符串中找字符

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

char*strrchr(const char *s,int c); 从右边开始

返回NULL表示没有找到

strstr 字符串中找字符串

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

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

posted @ 2026-01-25 08:48  wysy  阅读(5)  评论(0)    收藏  举报