我有以下代码:
#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数组(x
和b
)的输入。即如果我输入&#39; x&#39;进入输入,两个数组都成为x!
有些人可以帮助我理解为什么会这样,并帮助我找到解决这个非常严重问题的方法。
答案 0 :(得分:2)
x
和b
数组都只是两个元素的数组,并且(例如)x
数组初始化为{{1} }和'q'
。如果输入的任何内容超过单个字符'\0'
,那么您将写出数组scanf
的范围,导致未定义的行为。
您还可以在打印时访问数组界限,再次导致未定义的行为。您开始的x
数组在索引b
处建立索引。