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个字符为止,最后会自动加上字符 '' 作为字符串结束。
 4 参数:
 5     s:字符串
 6     size:指定最大读取字符串的长度(size - 1 7     stream:文件指针,如果读键盘输入的字符串,固定写为stdin
 8 返回值:
 9     成功:成功读取的字符串
10     读到文件尾或出错: NULL

fgets()在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。通过scanf和gets输入一个字符串的时候,不包含结尾的“ ”,但通过fgets结尾多了“ ”。fgets()函数是安全的,不存在缓冲区溢出的问题。

(3)puts()

1 #include <stdio.h>
2 int puts(const char *s);
3 功能:标准设备输出s字符串,在输出完成后自动输出一个'
'4 参数:
5     s:字符串首地址
6 返回值:
7     成功:非负数
8     失败:-1

(4)fputs()

1 #include <stdio.h>
2 int fputs(const char * str, FILE * stream);
3 功能:将str所指定的字符串写入到stream指定的文件中, 字符串结束符 ''  不写入文件。 
4 参数:
5     str:字符串
6     stream:文件指针,如果把字符串输出到屏幕,固定写为stdout
7 返回值:
8     成功:0
9     失败:-1

fputs()是puts()的文件操作版本,但fputs()不会自动输出一个' '。

(5)strlen()

1 #include <string.h>
2 size_t strlen(const char *s);
3 功能:计算指定指定字符串s的长度,不包含字符串结束符‘04 参数:
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所指向的空间中,''也会拷贝过去
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所指向的空间中,是否拷贝结束符看指定的长度是否包含'' 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指定的空间中,直到出现字符串结束符 ''  为止。
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 字符,当连续出现多个时只替换第一个为04 参数:
5     str:指向欲分割的字符串
6     delim:为分割字符串中包含的所有字符
7 返回值:
8     成功:分割后字符串首地址
9     失败:NULL

(17)atoi()

1 #include <stdlib.h>
2 int atoi(const char *nptr);
3 功能:atoi()会扫描nptr字符串,跳过前面的空格字符,直到遇到数字或正负号才开始做转换,而遇到非数字或字符串结束符('')才结束转换,并将结果返回返回值。
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,转载请注明出处。

原文地址:https://www.cnblogs.com/Alliswell-WP/p/C_BasicLearning_07.html