字符串输出
putchar 标准字节输出
· putchar 函数可以将参数 c 指定的字符 (一个无符号字符)输出到标准输出设备,其输出可以是一个字符,也可以是 0 - 127 之间的一个十进制的整数(包含 0 - 127 输出其对应的 ASCII 码字符),也可以是 char 类型定义好的一个字符型变量
#include <stdio.h>
int putchar(int c);
· int :执行成功返回 0,失败返回负值
· intc:需要进行输出的字符
· eg:putchar('A');
puts 标准行缓冲区字符串输出
· 将字符串的 '\0',转换为 \n,再输出
#include <stdio.h>
int puts(const char *str);
fputc 重定向字符输出
· fputc 的效果和 putchar 一致,只是 fputc 支持以文件流为基础的重定向输出
#include <stdio.h>
int puts(int c, FILE *stream);
fputs 重定向字符串输出
· fputs 的效果和 puts 一致,只是 fputc 支持以文件流为基础的重定向输出
#include <stdio.h>
int puts(const char *str, FILE *stream);
字符串输入
gets 标准行缓冲区字符串输入
· gets 从标准输出中获取用户输入的字符串
· 一般不使用 gets 函数,在某些意外情况下会导致程序陷入不可控的状态,一般建议使用 fgets 来代替
· 与 scanf 不同的是 scanf 不读取空格,gets 读取空格
#include <stdio.h>
char *gets(char *s);
· char *: 执行成功返回指向 s 的指针;如果发生错误或是达到末尾时还未读取到任何字符,则返回 NULL
· char *s: 指向字符数组的指针,用于存储字符串
· gets 不会检查缓冲区溢出,要保证缓冲区足够大
getchar 标准字节输入
· 该函数以无符号 char 强制类型转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回负值 (EOF)
· 只能读取一个字符
#include <stdio.h>
int getchar(void);
· int: 执行成功无符号 char 强制类型转换为 int 的形式返回读取的字符,执行失败返回负值
fgetc 重定向字节输出
· 该函数与 getchar 的效果一致,只不过 fgetc支持重定向输入
#include <stdio.h>
int fgetc(FILE *stream);
fgets 重定向字符串输入
· 该函数与 gets 的效果一致,只不过 fgets 支持重定向输入
#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
· char * : 执行成功返回指向 s 的指针,执行失败返回 NULL
· char *s : 输入缓冲区
· int size : 申请读取的字节数
· FILE *stream : 文件流指针
字符串拼接
strcat 直接字符串拼接
· strcat 函数会把 dest 字符串末尾的 '\0' 覆盖掉,然后把 src 拼接到 dest 的末尾中去
· 必须保证 dest 的内存大小足够大,否则会导致溢出错误
#include <stdio.h>
char *strcat(char *dest, char *src);
· char * : 执行成功返回拼接成功的字符串指针
· char *dest : 原字符串
· char *src : 追加字符串
strncat 指定字符拼接
#include <stdio.h>
char *strncat(char *dest, char *src, size_t n);
· char * : 执行成功返回拼接成功的字符串指针
· char *dest : 原字符串
· char *src : 追加字符串
· size_t n : 要追加的最大字符数
字符串拷贝
strcpy 直接拷贝
· 要保证 dest 的内存空间足够大,否则会导致溢出错误
#include <stdio.h>
char *strcpy(char *dest, char *src);
· char * : 执行成功返回拷贝成功的 dest 字符串指针
· char *dest : 目标字符串
· char *src : 源字符串
strncpy 指定拷贝
#include <stdio.h>
char *strncpy(char *dest, char *src, size_t n);
· char * : 执行成功返回拷贝成功的 dest 字符串指针
· char *dest : 目标字符串
· char *src : 源字符串
· size_t n : 指定要拷贝的最大字符数
内存填充
bzero 内存数据清零
· bzero 函数用于将某块内存的数据清零
#include <stdio.h>
void bzero (void *s, size_t n);
· void *s : 操作的内存空间的起始地址
· size_t n : 清零的字节数
memset 内存数据设置
· memset 函数用于将某块内存的数据设置为指定的值
#include <stdio.h>
void *memset (void *s, int *c, size_t n);
· void* : 执行成功返回拷贝成功的 s 字符串指针,执行失败返回 NULL
· void *s : 操作的内存空间的起始地址
· int *c : 设置填充的值
· size_t n : 填充的字节数
· c 虽然是 int 类型的,但是在执行时会把 c 强制类型转换为 unsigned char 再进行填充
字符串比较
strcmp 直接比较
· strcmp 主要是通过比较字符串中的字符对应的 ASCII 码的值,根据 str1 和 str2 依次比较每一个字符,直到不同的字符出现,或是达到字符串的末尾 '\0'
· 其实只能比较字符串是否相等而已,没办法比较字符串的长度和字符串的对应字符数字的大小
#include <stdio.h>
int strcmp (const char *s1, const char *s2);
· int: 如果 str1 小于 str2,返回负值
如果 str1 大于 str2, 返回正数
如果 str1 等于str2, 返回零
· const char *s1:比较字符串
· const char *s2:比较字符串
strncmp 指定比较
· strncmp 的作用和 strcmp 的作用是一致的,只是 strncmp 多了指定字符数的比较功能
#include <stdio.h>
int strncmp (const char *s1, const char *s2, size_t n);
· int: 如果 str1 小于 str2,返回负值
如果 str1 大于 str2, 返回正数
如果 str1 等于str2, 返回零
· const char *s1: 比较字符串
· const char *s2: 比较字符串
· size_t n: 指定要比较的字符的个数
字符串查找
strchr 单字符顺序查找
· strchr 的查询是从首部到末尾开始查询
#include <stdio.h>
char *strchr(const char *s, int c);
· char *:返回字符 c 第一次在字符串 s 中出现的位置。如果未找到字符 c 返回 NULL
· const char *s:基字符串
· int c:需查找的字符
strrchr 单字符逆序查找
· strrchr 的查询是从末尾到首部开始查询
#include <stdio.h>
char *strrchr (const char *s, int c);
· char *:返回字符 c 第一次在字符串 s 中出现的位置。如果未找到字符 c 返回 NULL
· const char *s:基字符串
· int c:需查找的字符
strstr 字符串查找
#include <stdio.h>
char *strstr (const char *haystack, const char *needle);
· char *:返回字符串 needle 第一次在字符串 haystack 中出现的位置。如果未找到字符串 haystack 返回 NULL
· const char *haystack:基字符串
· const char *needle:需查找的字符串
字符串数字的转换
整形转换
十进制转换
· 操作的字符串 nptr 中可以包含非数字字符,转换时跳过前面的空格字符(如果目标字符开头存在空格字符的话),直到遇到数字字符或是正负号才开始转换,直到字符串的末尾 '\0'
· 只能对十进制的字符串进行数值的转换
#include <stdlib.h>
int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);
· 返回值 :返回对应的十进制的整型数据
· const char *nptr值 :操作字符串
任意进制转换
· 操作的字符串 nptr 中可以包含非数字字符,转换时跳过前面的空格字符(如果目标字符开头存在空格字符的话),直到遇到数字字符或是正负号才开始转换,直到字符串的末尾 '\0'
#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);
unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);
· 返回值 :返回对应的十进制的整型数据
· const char *nptr值 :操作字符串
· char **endptr:如果 endptr 不为 NULL,则 strtol 和 strtoll 会把字符串中第一个无效字符的地址存储在 *endptr 中;如果根本就没有数字,strtol 和 strtoll 会把 nptr 的原始数据存储在 *endptr 中并返回 0;也可以将 endptr 设置为 NULL, 表示不接受相应信息
· int base:操作字符串中的进制
· 如果 base = 0 时,如果字符串中包含一个 0x 的前缀,表该数字将以 16 为基数;如果包含的是 0 的前缀,表示该数字以 8 为基数
浮点型转换
· 操作的字符串 nptr 中可以包含非数字字符,转换时跳过前面的空格字符(如果目标字符开头存在空格字符的话),直到遇到数字字符或是正负号才开始转换,直到字符串的末尾 '\0'
#include <stdlib.h>
double atof(const char *nptr);
double strtod(const char *nptr, char **endptr);
float strtof(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr);
· 返回值 :返回对应的十进制的浮点数数据
· const char *nptr值 :操作字符串
· char **endptr:如果 endptr 不为 NULL,则 strtol 和 strtoll 会把字符串中第一个无效字符的地址存储在 *endptr 中;如果根本就没有数字,strtol 和 strtoll 会把 nptr 的原始数据存储在 *endptr 中并返回 0;也可以将 endptr 设置为 NULL, 表示不接受相应信息
数字转字符串
· 使用 sprintf 或是 snprintf 格式输出函数将输出内容重定向到缓冲区中就可以
sprintf 缓冲区输出
· sprintf 函数将格式化参数输入到 *buf 缓冲区中
#include <stdio.h>
int sprintf(char *buf, const char *format, ...);
· int:执行成功输出的字符数
· char *buf:输出缓冲区
· const char *format: 可变格式化参数
snprintf 指定缓冲区字符输出
· snprintf是C语言中的一个函数,用于将格式化的数据输出到一个字符数组中,并限制写入的字符数量,以避免缓冲区溢出。
· snprintf 在写入数据时会检查缓冲区的剩余空间,并根据 size 参数来确保不会溢出。这是一种更安全的方式,可以避免缓冲区溢出导致的潜在问题
#include <stdio.h>
int snprintf(char *buf, size_t size, const char *format, ...);
· int: 执行成功输出的字符数
· char *buf: 输出缓冲区
· size_t size: 申请输出的字符数
· const char *format: 可变格式化参数