#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”呢?
如果它不在第一个块中,那么为什么要打印出来?
答案 0 :(得分:0)
原因是您声明的字符串x
和y
不是以空值结尾的。当您的代码打印出NO
时,它打印出数组x
中的字符并继续打印,直到在内存中找到一个NULL字节为止。在您的计算机上,偶然地,字符串YES
被放置在NO
之后的内存中,但是当我在计算机上编译此代码时,我得到了NO???im in 2
,换句话说就是垃圾。 >
您必须做的就是这样声明您的字符串:
char x[4]="YES\0";
char y[3]="NO\0";
这样,printf
将知道何时停止打印字符。