目录

1、字符串输出

1.1、putchar() 函数

1.2、fputc ()函数

1.3、puts ()函数

1.4、fputs ()函数

2、字符串输入

2.1、getchar ()函数

2.2、fgetc ()函数

2.3、gets ()函数

2.3、fgets ()函数

2.4、fgets()与 gets()的区别

2.5、gets()与 scanf()的区别

3、字符串长度

3.1、sizeof 和 strlen 的区别

4、字符串拼接

4.1、strcat()函数

4.2、strncat ()函数

5、字符串拷贝

5.1、strcpy()函数

5.2、strncpy ()函数

5.3、memcpy()函数

5.3、memmove()函数

5.3、bcopy()函数

6、内存填充

6.1、memset 函数

6.2、bzero 函数

7、字符串比较

7.1、strcmp()函数

7.2、strncmp ()函数

8、字符串查找

8.1、strchr ()函数

8.2、strrchr ()函数

8.3、strstr ()函数

8.4、strpbrk()函数

8.5、index()函数

8.6、rindex()函数

9、字符串转数字

9.1、atoi()函数

9.2、atol()函数

9.3、atoll()函数

9.4、atof ()函数

9.5、strtol()函数

9.6、strtoll()函数

9.7、strtoul()函数

9.8、strtoull()函数

9.9、strtof()函数

9.10、strtod()函数

9.11、strtold()函数

10、数字转字符串

10.1、printf()函数

10.2、fprintf()函数

10.3、dprintf()函数

10.2、sprintf()函数

10.3、snprintf()函数


1、字符串输出

1.1、putchar() 函数

向标准输出设备输出一个字符。

#include <stdio.h>int putchar(int c);

参数 c: 需要进行输出的字符。
返回值: 出错将返回 EOF。

1.2、fputc ()函数

输出一个字符。

注:与 putchar()区别在于,putchar()输出到标准输出设备,而 fputc()可把字符输出到指定的文件中。

#include <stdio.h>int fputc(int c, FILE *stream);

参数 c: 需要进行输出的字符。
参数  stream: 文件指针。
返回值: 成功时返回输出的字符; 出错将返回 EOF。

1.3、puts ()函数

向标准输出设备输出字符串并自行换行(即遇到' \0 '结束输出,并将' \0 '转换为换行符' \n ')。

#include <stdio.h>int puts(const char *s);

参数 s: 需要进行输出的字符串。
返回值: 成功返回一个非负数;失败将返回 EOF, EOF 其实就是-1。

1.4、fputs ()函数

输出字符串并自行换行(即遇到' \0 '结束输出,并将' \0 '转换为换行符' \n ')

注:与 puts()区别在于, puts()只能输出到标准输出设备,而 fputs()可把字符串输出到指定的文件中。

#include <stdio.h>int fputs(const char *s, FILE *stream);

参数 s: 需要输出的字符串。
参数 stream: 文件指针。
返回值: 成功返回非负数;失败将返回 EOF。

2、字符串输入

2.1、getchar ()函数

用于从标准输入设备中读取一个字符。

注:从输入缓冲区读取字符数据,但只读取一个字符,包括空格、 TAB 制表符、换行回车符等。

#include <stdio.h>int getchar(void);

返回值: 该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

2.2、fgetc ()函数

读取一个输入字符。

注:fgetc()与 getchar()的区别在于, fgetc 可以指定输入字符的文件,既可以从标准输入设备输入字符,也可以从一个普通文件中输入字符。

#include <stdio.h>int fgetc(FILE *stream);

参数 stream: 文件指针。
返回值: 该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

2.3、gets ()函数

gets()函数用于从标准输入设备(譬如键盘)中获取用户输入的字符串,直到用户输入回车换行符结束。gets()函数不检查缓冲区溢出。

#include <stdio.h>char *gets(char *s);

参数 s: 指向字符数组的指针, 用于存储字符串。
返回值: 如果成功, 该函数返回指向 s 的指针; 如果发生错误或者到达末尾时还未读取任何字符,则返回 NULL。

注:从键盘输入的字符串数据首先会存放在一个输入缓冲区中, gets()函数会从输入缓冲区中读取字符串存储到字符指针变量 s 所指向的内存空间,当从输入缓冲区中读走字符后,相应的字符便不存在于缓冲区了。

2.3、fgets ()函数

获取输入的字符串。

#include <stdio.h>char *fgets(char *s, int size, FILE *stream);

参数 s: 指向字符数组的指针,用于存储字符串。
参数 size: 这是要读取的最大字符数。
参数 stream: 文件指针。

返回值: 如果成功, 该函数返回指向 s 的指针; 如果发生错误或者到达末尾时还未读取任何字符,则返回 NULL。

2.4、fgets()与 gets()的区别

1)gets()只能从标准输入设备中获取输入字符串,而 fgets()既可以从标准输入设备获取字符串、也可以从一个普通文件中获取输入字符串。

2)fgets()可以设置获取字符串的最大字符数。

3)gets()会将缓冲区中的换行符'\n'读取出来、将其丢弃、将'\n'替换为字符串结束符'\0'fgets()也会将缓冲区中的换行符读取出来,但并不丢弃,而是作为字符串组成字符存在,读取完成之后自动在最后添加字符串结束字符'\0'。

2.5、gets()与 scanf()的区别

分隔符

gets()函数以回车作为分隔符

scanf()函数空格、换行符、 TAB 制表符等

从输入缓冲区 gets()读走缓冲区中的字符串数据之后,缓冲区中将不会遗留下回车换行符
使用 scanf()读走缓冲区中的字符串数据时,并不会将分隔符(空格、 TAB 制表符、 回车换行符等) 读走将其丢弃,所以使用 scanf()读走缓冲区中的字符串数据之后,缓冲区中依然还存在用户输入的分隔符。

3、字符串长度

用于计算字符串长度。

#include <string.h>size_t strlen(const char *s);

参数 s: 需要进行长度计算的字符串,字符串必须包含结束字符' \0 '。
返回值: 返回字符串长度(以字节为单位),字符串结束字符' \0 '不计算在内。

3.1、sizeof 和 strlen 的区别

1)sizeof 是 C 语言内置的操作符关键字,而 strlen 是 C 语言库函数;
2)sizeof 仅用于计算数据类型的大小或者变量的大小,而 strlen 只能以结尾为' \0 '的字符串作为参数;
3)编译器在编译时就计算出了 sizeof 的结果,而 strlen 必须在运行时才能计算出来;
4) sizeof 计算数据类型或变量会占用内存的大小, strlen 计算字符串实际长度。

4、字符串拼接

4.1、strcat()函数

将两个字符串连接(拼接)起来。

注:strcat()函数会把 src 所指向的字符串追加到 dest 所指向的字符串末尾,所以必须要保证 dest 有足够的存储空间来容纳两个字符串,否则会导致溢出错误dest 末尾的' \0 '结束字符会被覆盖, src 末尾的结束字符'\0 '会一起被复制过去,最终的字符串只有一个' \0 '。

#include <string.h>char *strcat(char *dest, const char *src);

参数 dest: 目标字符串。
参数 src: 源字符串。
返回值: 返回指向目标字符串 dest 的指针。

4.2、strncat ()函数

strncat 可以指定源字符串追加到目标字符串的字符数量
注:如果源字符串 src 包含 n 个或更多个字符, 则 strncat()将 n+1 个字节追加到 dest 目标字符串(src 中的 n个字符加上结束字符' \0 ')。

#include <string.h>char *strncat(char *dest, const char *src, size_t n);

参数 dest: 目标字符串。
参数 src: 源字符串。
参数 n: 要追加的最大字符数。

返回值: 返回指向目标字符串 dest 的指针。

5、字符串拷贝

5.1、strcpy()函数

字符串拷贝。strcpy()会把 src(必须包含结束字符' \0 ') 指向的字符串复制(包括字符串结束字符' \0 ') 到 dest,所以必须保证 dest 指向的内存空间足够大,能够容纳下 src 字符串,否则会导致溢出错误。

#include <string.h>char *strcpy(char *dest, const char *src);

参数 dest: 目标字符串。
参数 src: 源字符串。
返回值: 返回指向目标字符串 dest 的指针。

5.2、strncpy ()函数

strncpy()可以指定从源字符串 src 复制到目标字符串 dest 的字符数量。
注:把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 n 小于或等于 src 字符串长度(不包括结束字符的长度)时, 则复制过去的字符串中没有包含结束字符' \0 ';当 n 大于 src 字符串长度时,则会将 src 字符串的结束字符' \0 '也一并拷贝过去, 必须保证 dest 指向的内存空间足够大,能够容纳下拷贝过来的字符串,否则会导致溢出错误。

#include <string.h>char *strncpy(char *dest, const char *src, size_t n);

参数 dest: 目标字符串。
参数 src: 源字符串。
参数 n: 从 src 中复制的最大字符数。
返回值: 返回指向目标字符串 dest 的指针。

5.3、memcpy()函数

内存拷贝。

#include <string.h>void *memcpy(void *dest, const void *src, size_t n);

参数 dest: 目标字符串。
参数 src: 源字符串。
参数 n: 从 src 中复制的最大字符数。

5.3、memmove()函数

memmove用于拷贝字节,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。

#include <string.h>void *memmove(void *dest, const void *src, size_t n);

参数 dest: 目标字符串。
参数 src: 源字符串。
参数 n: 从 src 中复制的最大字符数。

5.3、bcopy()函数

将字符串src的前n个字节复制到dest中。

 #include <strings.h>void bcopy(const void *src, void *dest, size_t n);

参数 src: 源字符串。

参数 dest: 目标字符串。
参数 n: 从 src 中复制的最大字符数。

注:bcopy不检查字符串中的空字节NULL,函数没有返回值。 在POSIX.1-2001中,bcopy()被标记为不赞成使用,到POSIX.1-2008,bcopy()被移除出了标准,POSIX标准建议用memcpy()、memmove()代替。

6、内存填充

6.1、memset 函数

用于将某一块内存的数据全部设置为指定的值。

#include <string.h>void *memset(void *s, int c, size_t n);

参数 s: 需要进行数据填充的内存空间起始地址。
参数 c: 要被设置的值,该值以 int 类型传递。
参数 n: 填充的字节数。
返回值: 返回指向内存空间 s 的指针。

6.2、bzero 函数

用于将一段内存空间中的数据全部设置为 0.

#include <strings.h>void bzero(void *s, size_t n);

参数 s: 内存空间的起始地址。
参数 n: 填充的字节数。
返回值: 无返回值。

7、字符串比较

7.1、strcmp()函数

strcmp 进行字符串比较,主要是通过比较字符串中的字符对应的 ASCII 码值, strcmp 会根据 ASCII 编码依次比较 str1 和 str2 的每一个字符,直到出现了不同的字符,或者某一字符串已经到达末尾(遇见了字符串结束字符' \0 ')。

#include <string.h>int strcmp(const char *s1, const char *s2);

参数 s1: 进行比较的字符串 1。
参数 s2: 进行比较的字符串 2。
返回值:

如果返回值小于 0 则表示 str1 小于 str2
如果返回值大于 0 则表示 str1 大于 str2
如果返回值等于 0 则表示字符串 str1 等于字符串 str2

7.2、strncmp ()函数

用于字符串的前 n 个字符进行比较。

#include <string.h>int strncmp(const char *s1, const char *s2, size_t n);

参数 s1: 参与比较的第一个字符串。
参数 s2: 参与比较的第二个字符串。
参数 n: 最多比较前 n 个字符。
返回值: 返回值含义与 strcmp()函数相同。

8、字符串查找

8.1、strchr ()函数

查找到给定字符串当中的某一个字符(从左到右)。

#include <string.h>char *strchr(const char *s, int c);

参数 s: 给定的目标字符串。
参数 c: 需要查找的字符。
返回值: 返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。
字符串结束字符' \0 '也将作为字符串的一部分, 因此,如果将参数 c 指定为' \0 ',则函数将返回指向结束字符的指针。 strchr 函数在字符串 s 中从前到后(或者称为从左到右)查找字符 c,找到字符 c 第一次出现的位置就返回,返回值指向这个位置,如果找不到字符 c 就返回 NULL。

8.2、strrchr ()函数

查找到给定字符串当中的某一个字符(从右到左)。

#include <string.h>char *strrchr(const char *s, int c);

8.3、strstr ()函数

可在给定的字符串中查找第一次出现子字符串的位置,不包含结束字符' \0 '

#include <string.h>char *strstr(const char *haystack, const char *needle);

参数 haystack: 目标字符串。
参数 needle: 需要查找的子字符串。
返回值: 如果目标字符串 haystack 中包含了子字符串 needle,则返回该字符串首次出现的位置;如果未能找到子字符串 needle,则返回 NULL。

8.4、strpbrk()函数

检索字符串 str1 中第一个匹配字符串 str2 中字符的字符,不包含空结束字符。也就是说,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。

#include <string.h>char *strpbrk(const char *s, const char *accept);

8.5、index()函数

函数返回一个指针,指向字符串s中第一次出现的字符c。结束空字节('\0')被认为是字符串的一部分。 

#include <strings.h>char *index(const char *s, int c);

参数 s: 给定的目标字符串。
参数 c: 需要查找的字符。

返回值:函数返回一个指向匹配字符的指针,如果没有找到该字符则返回NULL。

注:由于index()在POSIX中已弃用且不属于C标准库,因此应使用strchr()

8.6、rindex()函数

函数返回一个指针,指向字符串s中第一次出现的字符c。结束空字节('\0')被认为是字符串的一部分。 

#include <strings.h>char *rindex(const char *s, int c);

参数 s: 给定的目标字符串。
参数 c: 需要查找的字符。

返回值:函数返回一个指向匹配字符的指针,如果没有找到该字符则返回NULL。

注:由于rindex()在POSIX中已弃用且不属于C标准库,因此应使用strrchr()。

9、字符串转数字

9.1、atoi()函数

将字符串转换为int类型。

#include <stdlib.h>int atoi(const char *nptr);

参数 nptr: 需要进行转换的字符串。
返回值: 分别返回转换之后得到的 int 类型数据。
注:目标字符串 nptr 中可以包含非数字字符, 转换时跳过前面的空格字符(如果目标字符串开头存在空格字符) ,直到遇上数字字符或正负符号才开始做转换,而再遇到非数字或字符串结束时(' /0 ')才结束转换,并将结果返回。

9.2、atol()函数

将字符串转换为long类型。

#include <stdlib.h>long atol(const char *nptr);

参数 nptr: 需要进行转换的字符串。
返回值: 分别返回转换之后得到的 long int 类型数据。

9.3、atoll()函数

将字符串转换为long long类型。

#include <stdlib.h>long long atoll(const char *nptr);

参数 nptr: 需要进行转换的字符串。
返回值: 分别返回转换之后得到的 long long 类型数据。

9.4、atof ()函数

将字符串转换为一个 double 类型的浮点数据。

#include <stdlib.h>double atof(const char *nptr);

参数 nptr: 需要进行转换的字符串。
返回值: 返回转换得到的 double 类型数据。

9.5、strtol()函数

strtol()可以实现将多种不同进制数表示的字符串转换为整形数据。

#include <stdlib.h>long int strtol(const char *nptr, char **endptr, int base);

参数 nptr: 需要进行转换的目标字符串。
参数 endptr: char **类型的指针, 如果 endptr 不为 NULL,将字符串中第一个无效字符的地址存储在*endptr 中。 也可将参数 endptr 设置为 NULL,表示不接收相应信息。
参数 base:在 base=0 的情况下, 如果字符串包含一个了“0x”前缀, 表示该数字将以 16 为基数; 如果包含的是“0”前缀,表示该数字将以 8 为基数。当 base=16 时,字符串可以使用“0x”前缀。
返回值: 分别返回转换之后得到的 long int 类型数据以及 long long int 类型数据。
注:需要进行转换的目标字符串可以以任意数量的空格或者 0 开头, 转换时跳过前面的空格字符,直到遇上数字字符或正负符号(' + '或' - ') 才开始做转换,而再遇到非数字或字符串结束时(' /0 ')才结束转换,并将结果返回。

9.6、strtoll()函数

strtol()可以实现将多种不同进制数 表示的字符串转换为整形数据。

#include <stdlib.h>long long int strtoll(const char *nptr, char **endptr, int base);

9.7、strtoul()函数

使用方法与 strtol()一样,区别在于返回值的类型不同, strtoul()返回值类型是 unsigned
long int。

#include <stdlib.h>unsigned long int strtoul(const char *nptr, char **endptr, int base);

9.8、strtoull()函数

使用方法与strtoll()一样,区别在于返回值的类型不同 strtoull()返回值类型是 unsigned long long int。

#include <stdlib.h>unsigned long long int strtoull(const char *nptr, char **endptr, int base);

9.9、strtof()函数

将字符串转换为 float 类型数据

#include <stdlib.h>float strtof(const char *nptr, char **endptr);

注:参数与 strtol()含义相同,但是少了 base 参数。

9.10、strtod()函数

将字符串转换为double 类型数据。

#include <stdlib.h>double strtod(const char *nptr, char **endptr);

注:参数与 strtol()含义相同,但是少了 base 参数。

9.11、strtold()函数

将字符串转换为long double 类型数据

#include <stdlib.h>long double strtold(const char *nptr, char **endptr);

注:参数与 strtol()含义相同,但是少了 base 参数。

10、数字转字符串

10.1、printf()函数

格式化输出到stdin。

#include <stdio.h>int printf(const char *format, ...);

参数 format:格式

返回值:一旦成功返回,将返回打印的字符数(不包括用于结束字符串输出的空字节)。

10.2、fprintf()函数

格式化输出到文件。

#include <stdio.h>int fprintf(FILE *stream, const char *format, ...);

参数 stream:FILE指针

参数 format:格式

返回值:一旦成功返回,将返回打印的字符数(不包括用于结束字符串输出的空字节)。

10.3、dprintf()函数

格式化输出到文件描述符。

#include <stdio.h>int dprintf(int fd, const char *format, ...);

参数 fd:文件描述符

参数 format:格式

返回值:一旦成功返回,将返回打印的字符数(不包括用于结束字符串输出的空字节)。

10.2、sprintf()函数

格式化输出到缓冲区。

#include <stdio.h>int sprintf(char *str, const char *format, ...);

参数 format:格式

返回值:一旦成功返回,将返回打印的字符数(不包括用于结束字符串输出的空字节)。

注:函数会在字符串尾端自动加上一个字符串终止字符'\0'。

10.3、snprintf()函数

格式化输出到缓冲区(最多size字节)。

#include <stdio.h>int snprintf(char *str, size_t size, const char *format, ...);

参数 str:缓存区

参数 size:最大字节

参数 format:格式

返回值:一旦成功返回,将返回打印的字符数(不包括用于结束字符串输出的空字节)。

注:函数会在字符串尾端自动加上一个字符串终止字符'\0'。 

linux C编程8-字符串处理相关推荐

  1. linux shell编程学习——数组使用

    linux的shell的编程方面很强大,最近在写脚本的时候,需要用到shell的数组.下面对最近的学习和使用做个简单的总结. 定义 linux的数组分两种,一种是普通的下标数组,一种是关联数组.前者和 ...

  2. Linux网络编程实例分析

    最近由于工作原因需要温习一下Linux网络编程的部分基础知识,因此对之前写的Socket网络通信的代码进行了进一步优化和拓展,在不关闭一次Socket连接的基础上,对服务端加入循环读写的功能,同时加入 ...

  3. linux c一站式编程 pdf,《Linux·C编程一站式学习》·(宋劲杉)·文字版.pdf

    Linux C 编程一站式学习 宋劲杉 北京亚嵌教育研究中心 版权 © 2008, 2009 宋劲杉, 北京亚嵌教育研究中心 Permission is granted to copy, distri ...

  4. linux c编程项目实例,Linux c编程实例_例子

    例一:字符与整型变量的实现 #include int main() { int c1,c2; char c3; c1='a'-'A'; c2='b'-'B'; c3='c'-; printf(&quo ...

  5. linux/unix编程手册-56_60

    title: linux/unix编程手册-55_56 date: 2018-10-05 11:53:07 categories: programming tags: tips linux/unix编 ...

  6. Linux Shell 编程学习总结

    Shell 教程 Shell简介:什么是Shell,Shell命令的两种执行方式 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成 ...

  7. Linux 系统编程

    linux c system函数介绍 system(执行shell 命令) 相关函数         fork,execve,waitpid,popen 表头文件         #i nclude& ...

  8. 实验六 Linux进程编程,Linux系统编程实验六:进程间通信

    <Linux系统编程实验六:进程间通信>由会员分享,可在线阅读,更多相关<Linux系统编程实验六:进程间通信(10页珍藏版)>请在人人文库网上搜索. 1.实验六:进程间通信l ...

  9. linux脚本编程(shell)浅介

    linux脚本编程(shell)浅介 2006-01-10 11:45 27693人阅读 评论(18) 收藏 举报 脚本shelllinux编程bash语言 linux脚本(shell)编程 啊,昨天 ...

  10. 【Linux系统编程】进程间通信之无名管道

    00. 目录 文章目录 00. 目录 01. 管道概述 02. 管道创建函数 03. 管道的特性 04. 管道设置非阻塞 05. 附录 01. 管道概述 管道也叫无名管道,它是是 UNIX 系统 IP ...

最新文章

  1. 人脸检测--S3FD: Single Shot Scale-invariant Face Detector
  2. python【数据结构与算法】Graph(图)的总结
  3. python中remove用法_Python 列表 remove() 使用方法及示例
  4. DOM-10 面向对象开发Todolist
  5. 【dfs】树上游戏(P2664)
  6. sass 安装和使用
  7. php oracle 操作 sql语句中能不能添加数组_如何在PHP中使用Oracle数据库_php
  8. DNS全局负载均衡(GSLB)基本原理
  9. MATLAB数据类型结构
  10. python做数学计算器_python作为计算器 数学用法
  11. ​全球首个机器人抓取云竞赛落幕,华科夺冠,中国团队包揽前三
  12. CCF-A类+B类+C类(2019)
  13. Windows 技术篇 - win10系统更新后切换应用一直自动切换为微软输入法解决方法,win10微软输入法卸载方法
  14. 2020高销量蓝牙耳机推荐,十大平价最受欢迎蓝牙耳机排行榜
  15. oracle 视图的写法,Oracle视图基础详解与实例
  16. QTableView如何设置表头宽度
  17. [机器学习与scikit-learn-15]:算法-决策树-分类问题代码详解
  18. android 喇叭帧动画,CSS动画效果——语音播放小喇叭
  19. java类的软考有哪些科目_软考各级别各科目考试分析
  20. 【烈日炎炎战后端】Git(0.1万字)

热门文章

  1. 【服务器数据恢复】硬盘坏道和不稳定扇区导致服务器崩溃的数据恢复案例
  2. linux随机数原理,Linux随机数生成器的原理与缺陷.pdf
  3. 【软件架构风格】软件架构风格概述
  4. 奇安信渗透测试面试题库_渗透测试--安服面试笔试题目记录-2020
  5. Vue2.x项目兼容IE9的常见问题及解决方案
  6. document.all详解
  7. J2EE基础教程1--简介
  8. centos普通用户权限问题解决:hadoop is not in the sudoers file. This incident will be reported.
  9. CentOS-定时清理内存缓存
  10. C语言程序设计 谭浩强 数据类型,运算符和表达式 知识点