关于scanf_s,printf,strlen读取字符串

相信同学们都曾遇到过这样一个问题

为什么我的scanf()函数就是不能对呢?,很简单改成scanf_s就可以了,

同样的来说一下这个scanf读取字符串,其实学过java的小伙伴都知道,使用Scanner可以直接读取一行的数据,不管你有没有空格,都能直接读取到整行的数据,如下

但是c语言中这个scanf_s就不太行,只能读取到第一个空的地方前面的内容,如下

相信大家应该看出来了,但是也不是没有办法的啦!这里使用指针来完成,思路如下

使用2个字符数组(name,fname)完成字符的获取(但是最后只是用name输出他的名字)

获取2个字符数组的长度,将name数组的内存地址赋予给char类型的指针变量(因为是最小的整数类型比较好操作)跳过已经存在值的字节,根据fname的长度将fname的值一个一个赋予到name内存的字节中如下(注释也有帮助大家看懂)

 

看到这里我一定要提醒大家一下,字符数组的结尾一定要用\0,不然读取的时候因为不能正常地读取范围会出现一些奇怪地字符,如果好奇右边地数字可以看看我的另一篇博客

Printf()的讲解

接下来就是printf地说法了,大家在打印字符地时候可能会发现一个问题,比如定义一个常量

#define PRIASE "I'm very cool"

大家会发现这里面有空格,有的小伙伴就好想应该不会全部读取吧,毕竟里面有空的地方!

那么让我们用实践来证明一下

 事实证明并不是那么一回事,那么这是怎么一回事呢?

其实大家在是一张图片中应该可以发现,我的输出中是"Angale Paints",这中间有个空的地方,但是我之前提到过,读取的时候会在空(数组的空在字节中就是\0)的地方停止读取,但是这里为什么呢?

这里给大家解释一下空格的ASCII表格对应的值是32,同样对应着16进制的20大家看上一张图的右边的数字区块会发现有个20!!

所以字符串的空格并不是空,而是一个有着准确值的字符!!!

strlen的讲解

使用此函数的时候记得使用#include<string.h>,里面有strlen的原型函数,

同样的读取的时候读取到\0就会直接停止读取,根据有值字节的长度判断你的数组长度

好了文章到这里结束了,请多多指点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值