C基础学习笔记——01-C基础第07天(字符串处理函数和函数)
在学习C基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
01-C基础第07天(字符串处理函数和函数)
目录:
一、字符串处理函数
(1)gets()(2)fgets()(3)puts()(4)fputs()(5)strlen()(6)strcpy()(7)strncpy()(8)strcat()(9)strncat()(10)strcmp()(11)strncmp()(12)sprintf()(13)sscanf()(14)strchr()(15)strstr()(16)strtok()(17)atoi()
二、函数
多文件(分文件)编程
一、字符串处理函数
(1)gets()
1 #include <stdio.h> 2 char *gets(char *s); 3 功能:从标准输入读入字符,并保存到s指定的内存空间,直到出现换行符或读到文件结尾为止。 4 参数: 5 s:字符串首地址 6 返回值: 7 成功:读入的字符串 8 失败:NULL
gets(str)与scanf(“%s”,str)的区别:
1)gets(str)允许输入的字符串含有空格
2)scanf(“%s”,str)不允许含有空格
注意:由于scanf()和gets()无法知道字符串s大小,必须遇到换行符或读到文件结尾为止才接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况。
(2)fgets()
1 #include <stdio.h> 2 char *fgets(char *s, int size, FILE *stream); 3 功能:从stream指定的文件内读入字符,保存到s所指定的内存空间,直到出现换行字符、读到文件结尾或是已读了size - 1个字符为止,最后会自动加上字符 '\0' 作为字符串结束。 4 参数: 5 s:字符串 6 size:指定最大读取字符串的长度(size - 1) 7 stream:文件指针,如果读键盘输入的字符串,固定写为stdin 8 返回值: 9 成功:成功读取的字符串 10 读到文件尾或出错: NULL
fgets()在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。通过scanf和gets输入一个字符串的时候,不包含结尾的“\n”,但通过fgets结尾多了“\n”。fgets()函数是安全的,不存在缓冲区溢出的问题。
(3)puts()
1 #include <stdio.h> 2 int puts(const char *s); 3 功能:标准设备输出s字符串,在输出完成后自动输出一个'\n'。 4 参数: 5 s:字符串首地址 6 返回值: 7 成功:非负数 8 失败:-1
(4)fputs()
1 #include <stdio.h> 2 int fputs(const char * str, FILE * stream); 3 功能:将str所指定的字符串写入到stream指定的文件中, 字符串结束符 '\0' 不写入文件。 4 参数: 5 str:字符串 6 stream:文件指针,如果把字符串输出到屏幕,固定写为stdout 7 返回值: 8 成功:0 9 失败:-1
fputs()是puts()的文件操作版本,但fputs()不会自动输出一个'\n'。
(5)strlen()
1 #include <string.h> 2 size_t strlen(const char *s); 3 功能:计算指定指定字符串s的长度,不包含字符串结束符‘\0’ 4 参数: 5 s:字符串首地址 6 返回值:字符串s的长度,size_t为unsigned int类型
(6)strcpy()
1 #include <string.h> 2 char *strcpy(char *dest, const char *src); 3 功能:把src所指向的字符串复制到dest所指向的空间中,'\0'也会拷贝过去 4 参数: 5 dest:目的字符串首地址 6 src:源字符首地址 7 返回值: 8 成功:返回dest字符串的首地址 9 失败:NULL
注意:如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况。
(7)strncpy()
1 #include <string.h> 2 char *strncpy(char *dest, const char *src, size_t n); 3 功能:把src指向字符串的前n个字符复制到dest所指向的空间中,是否拷贝结束符看指定的长度是否包含'\0'。 4 参数: 5 dest:目的字符串首地址 6 src:源字符首地址 7 n:指定需要拷贝字符串个数 8 返回值: 9 成功:返回dest字符串的首地址 10 失败:NULL
(8)strcat()
1 #include <string.h> 2 char *strcat(char *dest, const char *src); 3 功能:将src字符串连接到dest的尾部,‘\0’也会追加过去 4 参数: 5 dest:目的字符串首地址 6 src:源字符首地址 7 返回值: 8 成功:返回dest字符串的首地址 9 失败:NULL
(9)strncat()
1 #include <string.h> 2 char *strncat(char *dest, const char *src, size_t n); 3 功能:将src字符串前n个字符连接到dest的尾部,‘\0’也会追加过去 4 参数: 5 dest:目的字符串首地址 6 src:源字符首地址 7 n:指定需要追加字符串个数 8 返回值: 9 成功:返回dest字符串的首地址 10 失败:NULL
(10)strcmp()
1 #include <string.h> 2 int strcmp(const char *s1, const char *s2); 3 功能:比较 s1 和 s2 的大小,比较的是字符ASCII码大小。 4 参数: 5 s1:字符串1首地址 6 s2:字符串2首地址 7 返回值: 8 相等:0 9 大于:>0 10 小于:<0
(11)strncmp()
1 #include <string.h> 2 int strncmp(const char *s1, const char *s2, size_t n); 3 功能:比较 s1 和 s2 前n个字符的大小,比较的是字符ASCII码大小。 4 参数: 5 s1:字符串1首地址 6 s2:字符串2首地址 7 n:指定比较字符串的数量 8 返回值: 9 相等:0 10 大于: > 0 11 小于: < 0
(12)sprintf()
1 #include <stdio.h> 2 int sprintf(char *str, const char *format, ...); 3 功能:根据参数format字符串来转换并格式化数据,然后将结果输出到str指定的空间中,直到出现字符串结束符 '\0' 为止。 4 参数: 5 str:字符串首地址 6 format:字符串格式,用法和printf()一样 7 返回值: 8 成功:实际格式化的字符个数 9 失败: - 1
(13)sscanf()
1 #include <stdio.h> 2 int sscanf(const char *str, const char *format, ...); 3 功能:从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据。 4 参数: 5 str:指定的字符串首地址 6 format:字符串格式,用法和scanf()一样 7 返回值: 8 成功:参数数目,成功转换的值的个数 9 失败: - 1
(14)strchr()
1 #include <string.h> 2 char *strchr(const char *s, int c); 3 功能:在字符串s中查找字母c出现的位置 4 参数: 5 s:字符串首地址 6 c:匹配字母(字符) 7 返回值: 8 成功:返回第一次出现的c地址 9 失败:NULL
(15)strstr()
1 #include <string.h> 2 char *strstr(const char *haystack, const char *needle); 3 功能:在字符串haystack中查找字符串needle出现的位置 4 参数: 5 haystack:源字符串首地址 6 needle:匹配字符串首地址 7 返回值: 8 成功:返回第一次出现的needle地址 9 失败:NULL
(16)strtok()
1 #include <string.h> 2 char *strtok(char *str, const char *delim); 3 功能:来将字符串分割成一个个片段。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时, 则会将该字符改为\0 字符,当连续出现多个时只替换第一个为\0。 4 参数: 5 str:指向欲分割的字符串 6 delim:为分割字符串中包含的所有字符 7 返回值: 8 成功:分割后字符串首地址 9 失败:NULL
(17)atoi()
1 #include <stdlib.h> 2 int atoi(const char *nptr); 3 功能:atoi()会扫描nptr字符串,跳过前面的空格字符,直到遇到数字或正负号才开始做转换,而遇到非数字或字符串结束符('\0')才结束转换,并将结果返回返回值。 4 参数: 5 nptr:待转换的字符串 6 返回值:成功转换后整数
类似的函数有:
atof():把一个小数形式的字符串转化为一个浮点数。
atol():将一个字符串转化为long类型
二、函数
从函数定义的角度看,函数可分为系统函数和用户定义函数两种:
(1)系统函数,即库函数:这是由编译系统提供的,用户不必自己定义这些函数,可以直接使用它们,如我们常用的打印函数printf()。
(2)用户定义函数:用以解决用户的专门需要。
多文件(分文件)编程
防止头文件重复包含?
为了避免同一个文件被include多次,C/C++中有两种方式,一种是 #ifndef 方式,一种是 #pragma once 方式。
方法一:
1 #ifndef __SOMEFILE_H__ 2 #define __SOMEFILE_H__ 3 4 // 声明语句 5 6 #endif
方法二:
1 #pragma once 2 3 // 声明语句
在学习C基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
posted on 2020-06-02 11:06 Alliswell_WP 阅读(218) 评论(0) 编辑 收藏 举报