我正在编写一些简单的C程序来学习这门语言,到目前为止我认为我已经开始掌握基础知识,但我遇到了一个我不理解的奇怪行为。有人能告诉我这里出了什么问题以及如何解决它?
#include <stdio.h>
#include <string.h>
int main() {
const unsigned int MAX_LENGTH = 20;
char str[MAX_LENGTH];
unsigned int len = 0, i, j;
for (i = 0; i < MAX_LENGTH; i++) {
str[i] = getchar();
if (strncmp(&str[i], "\n", 1) == 0) {
break;
}
len++;
}
for (i = 1; i < len; i++) {
char whitespace[len];
for (j = 0; j < i; j++) {
whitespace[j] = ' ';
}
printf("%s%c\n", whitespace, str[i]);
}
return 0;
}
我输入&#34; Hello World!&#34;作为循环getchar()
方法的输入,我希望控制台看起来像这样:
Hello World!
e
l
l
o
W
o
r
l
d
!
但相反,我得到了这个胡言乱语:
Hello World!
;oQ?e
oQ?l
Q?l
?o
W
o
X?Pr
?Pl
Pd
!
答案 0 :(得分:2)
whitespace
数组未终止。
在for
循环之后添加一个空终止符,如
for (j = 0; j < i; j++) {
whitespace[j] = ' ';
}
whitespace[j] = `\0`;