2015-11-08 53 views
-1

我有以下代码:Scanf搞乱了我的char数组?

#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读输入到两个阵列(xb)的另一个程序中。即如果我在输入中键入'x',则这两个数组都变为x!

有些人可以帮助我理解为什么发生这种情况,并帮助我找到解决这个非常严重的问题。

+1

请学习如何使用调试器,以便能够至少在未来尝试帮助您的自我。 – alk

回答

2

两者xb数组只能元件的阵列,以及(例如)在x阵列初始化为'q''\0'。如果输入的任何东西超过一个字符scanf要读取,您将写出数组x的界限,导致未定义的行为

您在打印时也可以访问阵列越界,再次导致未定义的行为b array 开始索引在索引5