为什么会出现字符竖着赋给字符数组并且最后一行又横着赋的情况,求原理方面的详细解答。
是先竖着赋值,最后那个是横着赋值的,因为每次for循环都是读入到数组a里面,前面几次会被覆盖,最后那次读入没有被覆盖
具体过程是这样的 n=5
i=0时候 ,从a[0]地址开始读入字符串a0-a4 = qwert
i=1时候, 从a[1]地址开始读入字符串a0没有被覆盖,a1-a4都被覆盖了,a0=q,a1-a4=qwer
i=2时候, 从a[2]地址开始读入字符串a0,a1没有被覆盖,a2-a4都被覆盖了,a0=q,a1=q,a2-a4=xxs
i=3时候, 从a[3]地址开始读入字符串a0,a1,a2没有被覆盖,a3-a4都被覆盖了,a0=q,a1=q,a2=x, a3-a5=ssx
i=4时候, 从a[4]地址开始读入字符串a0,a1,a2,a3没有被覆盖,a4-a5都被覆盖了,a0=q,a1=q,a2=x,a3=s, a4-a7=jntm
所以i=4最后一次读入没有被覆盖了看起来是横着输入的,最后a被赋值了8个字符a0-a7,为qqxsjntm
看着竖着输入是因为被覆盖了
代码太奇怪了
for循环的scanf("%s"输入,你是怎么考虑的呢???
你题目是什麽,到底想输入一个字符串,还是n个字符串???
看下
我大概理解你的问题了。
第一个for循环赋值的是数组 a 的偏移 i 之后的地址,实际上还是字符串赋值进去了,而后面继续赋值就把后面的字符串覆盖。以你的例子解释吧:
1、第一个输入 qwert,存放在数组 a 偏移 0 的位置,此时数组 a 的值就是 qwert
2、第二个输入 qwer,存放在数组 a 偏移 1 的位置,此时数组 a 的值就是 qqwer
3、第三个输入 xxs,存放在数组 a 偏移 2 的位置,此时数组 a 的值就是 qqxxs
4、第四个输入 ssx,存放在数组 a 偏移 3 的位置,此时数组 a 的值就是 qqxssx
5、第五个输入 jntm,存放在数组 a 偏移 4 的位置,此时数组 a 的值就是 qqxsjntm
所以,最后数组 a 存放的字符串就是 qqxsjntm
结合你的代码和截图中的测试用例:for循环中用scanf依次读取5个字符串存入数组a。第一次读“qwert”,存入a[0]开始的位置,读入后a中存的数据是“qwert\0”;第二次读“qwer”,存入a[1]开始的位置,读入后a中的数据是“qqwer\0”,覆盖了数组a的1到5号元素;第三次读“xxs”,存入a[2]开始的位置,读入后a中的数据是“qqxxs\0”,覆盖了数组a的2到5号元素;第四次读“ssx”,存入a[3]开始的位置,读入后a中的数据是“qqxssx\0”,覆盖了数组a的3到6号元素;第五次读“jntm”,存入a[4]开始的位置,读入后a中的数据是“qqxsjntm\0”,覆盖了数组a的4到8号元素。之后,在for循环中用printf函数每次输出数组a的一个字符,并在输出每个字符后都输出回车换行。依次从a[0]输出到a[14]。for循环之后用puts函数输出整个字符串