一篇看懂 C语言常用 字符串函数,全网最全整理!

看下去一定对你有帮助!有帮助就点个赞吧

字符串函数 指的是头文件 stdio.h 中的输入输出函数 和 头文件string.h里定义的我们平时直接使用的函数。
一下是本节重点讲解的 10 个函数。对于生僻点的字符串函数我们以后再讲。

  • putchar & getchar
  • strlen & strnlen_s
  • strcmp & strncmp
  • strcpy & strncpy
  • strcat & strncat

这些函数我们到处在用,可你有没有想过,究竟这些函数是怎么声明和定义的?他们远没有你想的那么简单。

以下被划掉的部分如果你理解,那是最好。不理解不可以不用纠结,慢慢来

(一)putchar & getchar

putchar

int putchar( int ch )
头文件:stdio.h
定义:写字符 ch 到 stdout 。在内部,字符于写入前被转换到 unsigned char 。
stdout:标准输出 我们后面会单独讲
意思就是:向标准输出写入一个字符
等价于 putc(ch, stdout) 。
参数ch 要被写入的字符串
返回值
成功时返回写入的字符。
失败时返回 EOF 并设置 stdout 上的错误指示器
EOF(end of file)是一个宏,值为 -1

第一次看到这个函数的 返回类型 和 参数类型 我其实很懵:
嗯?
我输入的不是 char 类型的吗? 怎么参数类型是 int ?
我看到的不是 char 类型的 A 吗?怎么返回类型是 int?


其实,输出是什么不代表返回就是什么。scanf还返回整数呢,照样可以输出汉字。

下面的程序帮助大家理解:

int main(void) {
   

	char ch = 'A';

	int a = 0;

	a = putchar(ch);

	printf("\n%d", a);

	return 0;

}

输出:

A
65

上面我说慢慢来的时候也许有同学不屑:“这还用慢慢来?早会了!”
那好吧,putchar 的上面的定义中说它等价于 putc
要不我们再来看看 putc 是怎么定义的?与 putc 类似的还有个 fputc
要想真正理解它们还得看看 ferror,一个个来呗?

A watched pot never boils —— 心急吃不了热豆腐

getchar

int getchar(void)
头文件:stdio.h
定义
从 stdin 读取下一个字符。
等价于 getc(stdin) 。
也就是 从标准输入读入一个字符
参数:无
返回值
成功时为获得的字符
失败时为 EOF 。

getchar的返回值有什么用?

如何退出下面程序中的 while循环?
可以自己打出来先测试一下。

int main(void) {
   

	int ch;
	
	while ((ch = getchar()) != EOF) {
   
		putchar(ch);
	}

	printf("EOF\n");
	//退出循环的方式可能有两种:
	//1.程序被关闭。EOF不会输出
	//2.退出了循环,程序继续向下运行。EOF会被输出

	return 0;
}

后面还会继续详细讲解 这部分知识。可以自行思考一下,也可以查阅资料看看。
我做了一个便于理解的图示,如果现在就想看,在公众号回复[0206]查看。

为了减少冗余,下面的程序我只写 main 函数部分,
但是在你写程序到时候你要记得引用头文件 string.h

(二)strlen & strnlen_s

帮你理解:
strlen: string lenth

strlen

size_t strlen( const char *str )
头文件string.h
参数:str - 指向要检测的空终止字符串的指针
返回值: 空终止字节字符串 str 的长度。


定义:返回给定空终止字符串的长度,即首元素为 str 所指,且不包含首个空字符的字符数组中的字符数。
若 str 不是指向空终止字节字符串的指针则行为未定义。

什么是 空终止字节字符串?
空终止字节字符串( NTBS )是尾随零值字节(空终止字符)的非零字节序列。字节字符串中的每个字节都是一些字符集的编码。例如,字符数组 {’\x63’,’\x61’,’\x74’,’\0’} 是一个以 ASCII 编码表示字符串 “cat” 的 NTBS 。

strnlen_s

size_t strnlen_s( const char *str, size_t strsz )
头文件string.h
参数
str - 指向要检测的空终止字符串的指针
strsz - 要检测的最大字符数量
返回值
成功时为空终止字节字符串 str 的长度,若 str 是空指针则为零,若找不到空字符则为 strsz 。


定义
除了若 str 为空指针则返回零,而若在 str 的首 strsz 个字节找不到空字符则返回 strsz 。
若 str 指向缺少空字符的字符数组且该字符数组的大小 < strsz 则行为未定义;换言之, strsz 的错误值不会暴露行将来临的缓冲区溢出。

strlen 与 strnlen_s 的区别与用法

1.空指针

int main() {
   

	char* str = NULL;
	
	//str为空指针,行为未定义。程序会崩溃
	printf("%d\n", strlen(str));
	
	//str为空指针,返回 0
	printf("%d\n", strnlen_s(str, 1));

	return 0;
}

2.没有终止符的字符串数组当作函数参数

int main() {
   

	char str[] = {
    'H', 'E', 'L', 'L', 'O', };
	
	printf("%d\n", strlen(str)
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值