【发布时间】:2020-11-09 17:56:24
【问题描述】:
我目前正在尝试解决 Hackerrank 上的一个问题,但我不太明白为什么我的解决方案不起作用。任务是打印'#' 的右对齐阶梯。我试过这个 C 代码:
void staircase(int n) {
char stair[n];
memset(stair, ' ', n *(sizeof(char)));
for(int i = n-1; i>= 0; i--)
{
stair[i] = '#';
printf("%s\n", stair);
}
}
如果 n = 8 或更低,它可以正常工作,但如果 n = 9 或更高,它仍然会打印楼梯,但在每行的末尾都有一些垃圾符号。我只是不太明白为什么这适用于某些数字而不适用于其他数字。字符串在 C 中的工作方式是否有问题?我知道我对这个问题的解决方案通常可能不是最有效的,但对我来说,这是为了理解为什么这段特定的代码不能正常工作。
【问题讨论】:
-
请包含输出
-
顺便说一句,
sizeof(char)根据定义始终为 1。 -
sizeof(char)的定义是 1。你应该删除它或者写一个更有用的sizeof(stair[0])。更好的是,您应该使用sizeof(stair)一次获得整个数组的大小。 -
可变大小的数组在 C 中被认为是不好的做法,您应该使用以下内容动态分配内存:
char *stair = (char*) malloc((n+1)*sizeof(char))在其中为您的 n 个字符和字符串结尾的字符分配内存\0。你应该在退出函数之前释放内存free(stair)
标签: c loops for-loop char c-strings