Scanf搞砸了我的char数组?

时间:2015-11-08 15:24:23

标签: c arrays scanf

我有以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  int i=0;
  char x[]="q";
  char b[]="f";

  printf("Enter a letter:");
  scanf(" %s", x);

  while(i<5)
  {
    printf("%c\n", x[i]);
    i++;
  }

  i=0;

  while(i<5)
  {
    printf("%c\n", b[i]);
    i++;
  }

  return 0;
}
  

有人可以解释为什么char数组b没有打印出来吗?

我只是得到一个小白盒子。同样的事情发生在我所拥有的另一个程序中scanf读取BOTH数组(xb)的输入。即如果我输入&#39; x&#39;进入输入,两个数组都成为x!

  

有些人可以帮助我理解为什么会这样,并帮助我找到解决这个非常严重问题的方法。

1 个答案:

答案 0 :(得分:2)

xb数组都只是两个元素的数组,并且(例如)x数组初始化为{{1} }和'q'。如果输入的任何内容超过单个字符'\0',那么您将写出数组scanf的范围,导致未定义的行为

您还可以在打印时访问数组界限,再次导致未定义的行为。您开始的x数组在索引b处建立索引。