我已经编写了代码来制作一个角色的正确金字塔。
但是,当我执行程序时,金字塔的最后两行会在它们之后放置垃圾字符,即使它超出了数组的大小。
代码在这里:
#include <stdio.h>
#include <string.h>
#define ROW 5
int main(void) {
char array[ROW];
int x = 0;
int row = 0;
for (row = 0; row < ROW; row++) {
array[x] = 'a';
if (x < ROW) {
printf("%s\n", dolla);
}
x++;
}
getchar();
}
垃圾字符来自哪里?它仅在第三个之后排成一行。
答案 0 :(得分:3)
代码中的问题是您没有使用\0
(null)字符终止字符串。这是您的代码的练习:
#include <stdio.h>
#include <string.h>
#define ROW 5
int main(void)
{
char array[ROW];
int x = 0;
int row = 0;
for(row = 0; row < ROW; row++)
{
array[x] = 'a';
if(x < ROW)
{
array[x+1]='\0';
printf("%s\n", array);
}
x++;
}
getchar();
}
我不是专家,但我在许多典型的C书中都读过以下内容:
C中的int
数组初始化为0
,而char
数组初始化为垃圾。
是的,忘了提,它不是dolla
,而是array
。
答案 1 :(得分:2)
char array[ROW+1] = {0};
会对你有所帮助。你可能假设数组是空的,但它充满了随机字符。通过使用{0}
初始化,数组以全零开始。
我假设dolla
是转录错误,dolla
应为array
或array
曾被命名为dolla
}。
答案 2 :(得分:0)
您可能超出数组中的值以使金字塔形成打印出您编译代码之前存在的垃圾值。 当您打印值而不是打印出整个数组(这意味着可能包含垃圾值)时,您可以打印到有效值的点,这可以通过在空格中引入空字符“\ 0”来完成。数组的结尾。 同样初始化数组将是一个更好的选择,因为您可以在看到输出后更好地调试代码。