佬们知道这是为什么吗?
str2设置了10个大小,我以为只能输入进10个字符
但是为什么能一直输入存到数组里
但是加空格的话,只能把空格前的内容存到数组里


佬们知道这是为什么吗?
str2设置了10个大小,我以为只能输入进10个字符
但是为什么能一直输入存到数组里
但是加空格的话,只能把空格前的内容存到数组里


首先要先明白字符串是怎么存储的
我们通过char *变量给了字符串的首地址,字符串会从首地址开始,一直向后存储,并在末尾加上结束符'/0'。而str2是在栈空间内的,不需要提前申请地址(虽然直接使用未声明的地址可能会产生问题),因此,当字符串被存在str2时,字符串的首个字符实际是存在str2的首地址,然后后面的每一个字符都紧接着上一个字符的地址存储,最后加上'/0'。当使用printf时,会从传入的首地址开始,不断向后读取,直至遇到'/0'
scanf中,如果加上了空格,就会自动将字符串的结果读取到变量,之后在回车之前,无论怎么输入都不会再存到变量里了(因为你只需要读取一个变量),因此,只存空格前是因为scanf把空格之后的给排除了