C编程在数组中打印错误的字符

时间:2018-08-02 15:38:03

标签: c c-strings

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

void main() {
  int a = 1, b = 0;
  int x1 = 0, v1 = 2, x2 = 5, v2 = 3;
  char x[3] = "YES";
  char y[2] = "NO";
  clrscr();

  while (a < 1000) {
    x1 = x1 + v1;
    x2 = x2 + v2;
    if (x1 == x2) {

      b = b + 1;
      printf("i m in 1");
      printf("%s", x);
      break;
    }
    a++;

  }
  if (b < 1) {
    printf("%s", y);
    printf("i m in 2");
  }

  getch();
}

它的输出为“ noys i m in 2”,但是为什么从那里得到“ yes”呢?
如果它不在第一个块中,那么为什么要打印出来?

1 个答案:

答案 0 :(得分:0)

原因是您声明的字符串xy不是以空值结尾的。当您的代码打印出NO时,它打印出数组x中的字符并继续打印,直到在内存中找到一个NULL字节为止。在您的计算机上,偶然地,字符串YES被放置在NO之后的内存中,但是当我在计算机上编译此代码时,我得到了NO???im in 2,换句话说就是垃圾。 >

您必须做的就是这样声明您的字符串:

char x[4]="YES\0";
char y[3]="NO\0";

这样,printf将知道何时停止打印字符。