发布时间:2024-04-29 15:01
入门级知识点,可能不全,之后想起来再更新:
几种字符串的定义方式:
#include
int main()
{
char *month[3]={"Jan","Feb","March"};
printf("%s\n",month[2]);
//month前面必须有星号,否则报错
char greeting[6]="Hello";
printf("%s\n",greeting);
//greeting[n],当n小于6时,运行会报错
char hello[]="Hello";
printf("%s\n",hello);
//方括号里不添加数组长度也可以
char *p="Greetings!";
printf("%s\n",p);
//指针型字符串,如果输出换成*p会报错
char c[]={'H','e','l','l','o'};
printf("%s\n",c);
printf("input:\n");
char inputc[10];
gets(inputc);
printf("%s",inputc);
return 0;
}
字符串以数组的形式存在数组表示,以‘\0’结尾。(0和‘\0’是一样的)
0标志字符串的结束,但是不属于字符串的一部分
头文件:
字符串变量:所占空间总比字母数多一个
Eg: "Hello"会被编译器会变成一个字符数组放在某处
不能用运算符对字符串做运算:
python可以做加乘,但是C 只能作为数组来处理
字符串变量
char *s=“Hello world”
等价于以下两个语句:
char *s;
s=“Hello world”
*这里的s是一个指针,初始化为指向一个字符串常量,是只读的,不能通过s[0]='L’来更改字符串
实际上,S是const char s
定义一个可以修改的字符串,应该用数组:char s[]=“Hello world”
指针还是数组:
1.数组:表示这个字符串就在这
作为本地变量,空间被自动回收
2.指针:这个字符串不知道在哪里
1)只表达一个字符串,只读
2)处理参数
3)动态分配空间
字符串可以表示成char *的形式,但是char *不一定表示字符串
char *本意是指向字符的指针,可能指向的是字符的数组
字符串的赋值:
char *t=“Hello”
char *p
p=t
此时,p指向t所指的字符串,在存储空间中,并没有产生一个新的字符串
字符串的输入输出:%
无论是scanf还是printf 都可以用%s
Scanf 读入一个string 到空格,tab结束
安全做法:scanf("&7s") 指定最多能读几位
字符串数组:用一个数组,表示很多个字符串
1、单字符的输入输出:
putchar 函数:
int putchar (int c)
向标准输出写入一个字符
返回值:返回写了几个字符,EOF(-1)表示失败
Eg:
char a=‘B’ //只能定义一个字符
putchar (a) //相当于printf("%c",a)
getchar 函数:
不需要有参数:int getchar (void)
从标准输入读入一个字符,返回值是这个字符
返回值的类型是int 是为了:返回EOF(-1)
Eg:
char a=getchar()
putchar(a)
1)gets()用于从标准输入流stdin读入一个整行(以’\n’或EOF)结束,写入ptr指向的字符数组,并返回这个指针;出错或遇到文件结束时则返回NULL。行末的’\n’从流中取出,但不写入数组。gets()不检查被写入的数组大小。
gets(str)
puts(str) //str是定义的数组名
2)getchar()用于从标准输入流stdin读入一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。使用时也应该注意这一点。
2、strlen 函数
srtlen (const char *s) :返回s的字符串长度(不包含结尾的0)
代码:
#include
#include
int main()
{
char line[]=“Hello”;
printf(“strlen=%lu \n”,strlen(line));
printf(“sizeof=%lu \n”,sizeof(line));
return 0;
}
sizeof的结果比strlen多一位,因为最后多一个0,sizeof得出的是指针所指向的所有空间
3.strcmp函数
用于比较两个字符串(以及其大小):
Int strcmp (const char s1,const chars2)
返回值:
0: s1==s2
1: s1>s2
-1: s1
#include
#include
int main()
{
char s1[]=“abc”;
char s2[]=“Abcd”;
int c=strcmp(s1,s2);
printf("%d",c);
return 0;
}
4.strcpy 函数
char *strcpy (char * restrict dst , const char *restrict src)
作用:把src的字符串拷贝到dst,restrict 表示dst 与src 不重叠(C99)
返回:dst
复制一个字符串:代码
#include
#include
#include
int main()
{
char *src="Hello";
char *dst=(char*)malloc(strlen(src)+1);
strcpy(dst,src);
printf("%s",dst);
return 0;
}
5.strcat 函数
Char *strcat(char *restrict s1,const char *restrict s2 )
把s2拷贝到s1后面,接成一个长字符串 (s1必须有足够的空间)
返回:s1
安全版本:strncpy,strncmp,strncat 括号最后多一项:size_t n 表示最多操作的字符个数
kernel 劫持seq_operations && 利用pt_regs
Datenlord | Rust实现RDMA异步编程(一):基于epoll实现RDMA 异步操作
ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造
【机器学习系列】【调参GridsearchCV】随机森林、GBDT、LightGBM和XGBoost调参顺序,外加一些加速调参的小技巧(主要介绍坐标下降)
【墨菲安全实验室】Spark(3.1.2, 3.2.1, 3.3.0版本)shell命令注入漏洞
R语言广义矩量法GMM和广义经验似然GEL估计ARMA、CAPM模型
手把手教你快速整合springBoot2.XRedis Sentinel哨兵集群
iOS 14惊现iPhone 12 Pro设计图细节:大失所望!