#pragma指令的作用:用于指定计算机操作系统特定的编译功能
#pragma warnging(disable:4996) 在c文件开始处协商,告诉编译器忽略4996警告,strcpy、scanf等一些不安全的函数就可以用了。
头文件:#include
函数:size_t strlen(const char *s)
char* str = "hello world";
char str1[20] = "hello world";
printf("%d\n", sizeof(str));//4
printf("%d\n", sizeof(str1));//20
printf("%d\n", strlen(str));//11
printf("%d\n", strlen(str1));//11
sizeof是一个关键字,判断占用内存的字节数。
strlen是个函数,判断的是字符串中字符的个数。
一个汉字算两个字符长度。
char* str = "你好";
printf("%d\n", strlen(str));//4
头文件:#include
函数:char* strcpy(char *dest, const char *src);
拷贝src指向的字符串到dest指向的内存中,‘\0’也会拷贝。
注意:使用此函数的时候,必须保证dest指向的内存空间足够大,否则会出现内存污染。
char str[100] = "hello world 111";
//只覆盖了前面的字符
strcpy(str, "yyyyy");
printf("%s\n", str);//yyyyy
printf("%s\n", str+6);//world 111
return 0;
头文件:#include
函数:char* strncpy(char *dest, const char *src, size_t count);
拷贝src指向的字符串的前count个字节到dest指向的内存中,不拷贝‘\0’。
**注意:**如果count大于src指向的字符串的字符个数,则在dest后面填充n-strlen(src)个’\0’
char str[100] = "hello world 111";
strncpy(str, "yyyyy", 2);
printf("%s\n", str);//yyllo world 111
strncpy(str, "yyyyy", 6);
printf("%s\n", str);//yyyyy
头文件:#include
函数:char* strcat(char *dest, const char *src);
strcat函数追加src字符串追加到dest字符串后面。追加的时候会追加’\0’
注意:判断dest结尾是按\0判断的。dest的内存要足够大。
char str[100] = "hello\0 world 111";
strcat(str, "aaaa");
printf("%s\n", str);//helloaaaa
头文件:#include
函数:char* strcat(char *dest, const char *src, size_t n);
追加src字符串前n个字符追加到dest字符串后面。追加的时候会追加’\0’
如果n大于src字符个数,只将src字符追加到dest后面。
头文件:#include 头文件:#include 头文件:#include 头文件:#include 头文件:#include 函数:void* memset(void *ptr, int value, size_t num); atoi\atol\atof 头文件:#include int sprintf(char *buf, const char *format, …); int sscanf(char *buf, const char *format, …); 1、跳过数据:%*s或者%*d 2、读取指定宽度的数据 3、支持集合操作 %[aBc] 匹配a、B、c中的任意一员。不匹配则停止 %[^aBc]匹配非aBc中的任意一员。 %[^a-z] 表示读取除a-z以外的所有字符。 1、const修饰普通变量,代表制度的意思。
函数:int strcmp(const char *s1, const char *s2);
比较s1和s2指向字符串的大小。
比较的方法:逐个比较ASCII码,比较出大小就返回,如果所有字符都一样,返回0,'\0’最小。
返回值:s1>s2,返回1,s1 char str[100] = "hello world 111";
char* str1 = "hello you";
int res = strcmp(str, str1);
printf("%d", res);//-1
strncmp
函数:int strcmp(const char *s1, const char *s2, size_t n);
比较两个字符串前n个字符。 char str[100] = "hello world 111";
char* str1 = "hello you";
int res = strncmp(str, str1, 5);
printf("%d", res);//0
字符查找函数
strchr
函数:char *strchr(const char *s1, int c);
在字符指针s指向的字符串中,找ASCII码为c的字符。
注意:是首次匹配。有多个,也只会返回第一次匹配到字符的地址,找不到返回NULL char str[100] = "hello world 111";
char* res = strchr(str, 'l');
printf("%d\n", res-str);//2
strrchr
函数:char *strrchr(const char *s1, int c);
和strchr的区别是,该函数是找最后一次匹配的地址。strstr
函数:char *strstr(const char *haystack, const char *needle);
在haystack指向的字符串中查找needle指向的字符串,也是首次匹配
找到返回字符串的首地址,没到找返回NULL char *str = "hello world 111";
char* res = strstr(str, "world");
printf("%p\n", str);//00367B30
printf("%p\n", res);//00367B36
空间设定函数
memset
memset函数是将ptr指向的内存空间的num个字节全部赋值为value
返回目的内存的首地址,即ptr的值。 char str[100] = "hello world 111";
memset(str, 'a', 5);
printf("%s\n", str);//aaaaa world 111
字符串转换数值
头文件:#include
函数:int atoi(const char *nptr);
函数:long atol(const char *nptr);
函数:double atof(const char *nptr);
将nptr指向的字符串转换称整数。无法转换为数字,则返回0。比如‘123’转换为123。 char *str = "123";
char *str1 = "abv";
int res = atoi(str);
int res1 = atoi(str1);
printf("%d\n", res);//123
printf("%d\n", res1);//0
字符串切割函数
strtok
函数:char *strtok(char *str, const char *delim);
字符串切割,按照delim指向的字符串中的字符,切割str指向的字符串。
其实就是在str指向的字符串中发现了delim字符串中的字符,就将其变成’\0’
调用一次只切割一次,再去切割需要将第一次参数传NULL,意思是按照上次切割的位置继续切.
无法切割返回NULL char str[100] = "aaa,:.bbb,:.ccc";
char* res = strtok(str, ",.:");
char* res1 = strtok(NULL, ",.:");
char* res2 = strtok(NULL, ",.:");
printf("%s\n", res);//aaa
printf("%s\n", res1);//bbb
printf("%s\n", res2);//ccc
格式化字符串操作函数
sprintf
输出到buf指定的内存区域。返回字符数#include
sscanf
从buf指定的内存区域读入信息。#include
高级用法
跳过一个。 char *str = "2023-10-07";
int a, b;
int res = sscanf(str, "%*d-%d-%d ", &a,&b);
printf("%d\n", a);//10
printf("%d\n", b);//7
printf("%d\n", res);//2
%[width]s char *str = "2023-10-07";
char resStr[20];
int res = sscanf(str, "%4s ", resStr);
printf("%s\n", resStr);//2023
printf("%d\n", res);//1
%[a-z]表示匹配a到z中任意字符。尽可能多的匹配;遇到不匹配的则停止 char *str = "asdfasdfa123saff";
char resStr[100];
int res = sscanf(str, "%[a-z] ", resStr);
printf("%s\n", resStr);//asdfasdfa
printf("%d\n", res);//1
char *str = "asdAAfasdfa123saff";
char resStr[100];
int res = sscanf(str, "%[Aads] ", resStr);
printf("%s\n", resStr);//asdAA
printf("%d\n", res);//1
char *str = "asdAAfasdfa123saff";
char resStr[100];
int res = sscanf(str, "%[^f] ", resStr);
printf("%s\n", resStr);//asdAA
printf("%d\n", res);//1
char *str = "hhhhjhjghasdAAfasdfa123saff";
char resStr[100];
int res = sscanf(str, "%[^a-f] ", resStr);
printf("%s\n", resStr);//hhhhjhjgh
printf("%d\n", res);//1
const
const int a = 100;以后的程序中不能修改a的值。
2、cosnt修饰指针
const char *str;
意思是str指向的内存的内容不能通过str来修改。但是恶意改变str的指向。
char * const str;
意思是str是只读的变量,str指向的内存可以修改,但是不能改变str的指向。
cosnt char * const str;
指向的内存不能修改,也不能改变指向。