相信同学们都曾遇到过这样一个问题
为什么我的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就会直接停止读取,根据有值字节的长度判断你的数组长度
好了文章到这里结束了,请多多指点