stdio and stdlib字符串处理

字符串输出

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: 可变格式化参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值