10.1.3 字符串输入输出

1.字符串赋值?

即:

如何再制造一个字符串,然后让s指向那个新的字符串,这件事我们等学到字符串函数再说.

2.字符串输入输出

我们可以用%s输入输出一个string,但是读到什么东西,读到什么地方为止是很微妙的.我们来试一下这个程序:

这样我们可以知道我们输出的那个东西的边界在哪:

我们调试运行一下:

我们发现程序给我们输出了第一个单词 并且没有空格,而且第二个单词也没读到.我们改一下:

运行结果:

我们发现两个scanf都没有带空格.因为这个空格是用来区分这个单词和那个单词的,它是一个分隔符.如果我们用空格代替回车,那么这个回车也不会被读进去.它在输出的时候也是不带那个回车的. 所以我们知道:

如果我们给scanf的函数的字符超过八个,如12345678,这就已经超过它可以接受的极限了.我们开的是8个char的数组,它最多只能接受七个字符,因为还有那个结尾的0.我们输入两次12345678,输出结果得到了##12345678##.为什么?

经测试,数组定义的时候word2[8]的地址在word[8]的前面,正好是连续的空间(这个涉及到一些后面的知识,不是说相邻定义的两个数组分配在一片连续的内存里,这只是一种特殊的情况).然后接收时多出来的第九个字符,'\0',被写到了word[0]的位置里.因为word[0]已经是'\0',那么打印的时候%s会识别word[0]就是字符串结束的地方,不再输出后面的字符.word2数组里面仍然是原样,所以被正常输出了.

这一次我们的运气好,它没有崩溃.如果我们把我们要做的事情放到另外一个函数里头,然后我们用刚才的方法去给它输入这个不恰当的输入,看看结果会怎么样.

运行出错.我们数组已经越界了,这个越界造成了严重的后果,导致程序崩溃.那怎么做是安全的呢.安全的方式是,在%面前加上7,这个数字的目的是告诉这个scanf,你最多只能读入7个字符,后面的内容就不再读入了.如果用户输入的东西小于7个字符,那肯定也是没有问题的.

3.常见错误

4.空字符串

如果定义了一个数组大小为100的空字符串,当你对除第一个单元以外的其他单元做初始化,那么我们对这个字符串做输出的结果是什么都不输出,因为开头的字符是\0,即表示结束.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值