关于‘\0’和‘\n’的去留问题

scanf

scanf函数在读取字符串的时候是不会读取空格、Tab、\n的;
并且scanf会自动给字符串添加\0
scanf函数在读取字符串结束时,并不会清理缓冲区,上一次操作留下的\n还在:
在这里插入图片描述
这也就提醒我们再利用scanf读取字符串或者字符完成后记得清理缓冲区,避免为后续的操作造成不必要的麻烦!!!

gets

gets函数用来读取字符串,除了\n不能读取之外啥都能读取,并且在完成读取的时候会自动在字符串末尾加\0,同时会清理掉这次遗留在缓冲区的\n;
实际上gets的读取机制是这样的:gets遇到\n就会停止读取,表示这次读取已经结束,并且会在末尾自动加上\0,同时完成缓冲区的清理(清理掉这次遗留在缓冲区的\n);
在这里插入图片描述
在这里插入图片描述

strcpy

是会将所有源头字符串的数据拷贝到目标字符串的,当然包括\0!!!
在这里插入图片描述
strcpy工作机制就是在源头字符串遇到\0,就停止拷贝同时会把\0也拷贝进目标字符串;
在这里插入图片描述

strncpy

strcpy如果需要拷贝的个数(也就是n)大于源头字符串的长度,那么strncpy会将整个源头拷过来,对于多出来的个数n则用\0来填充:
在这里插入图片描述
如果如果需要拷贝的个数(也就是n)小于等于源头字符串的长度,则strncpy就会拷贝需要的字符串个数同时不会多此一举给你自动的把\0也拷贝过来:

在这里插入图片描述

strcat

字符串拼接函数,工作机制就是:在目标字符串末尾(\0位置处)开始拼接源头字符串,直到源头字符串遇到\0位置,当然strcat会将\0也自动拼接过去:
在这里插入图片描述

strncat

当我们需要拼接的个数大于源头字符串的个数那么strncat就等价于strcat,同时他不会像strncpy那样将多余的n用\0来填充;!!!
在这里插入图片描述

当我们需要拼接的个数小于、等于源头字符串的个数那么strncat就会有多少拼接多少,但是拼接完成过后会自动加上\0;
在这里插入图片描述

总结

当需求数n小于等于实际源头字符串长度时:
strncpy就会有多少拷贝多少,不会拷贝\0;
strncat就是有多少拼接多少,并且会在末尾自动添加\0;
当需求数n大于实际源头字符串长度时:
strncpy就会将有效数据先全部拷贝进目标数组,然后多出来的n就会用\0来填充;
strncat这时就等价于strcat,对于多余的n,不会用\0来填充;

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南猿北者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值