在下面给出的代码中,(例如n = 5)数组'b'的最后两个索引(即b [4],b [5])显示了垃圾值。为什么会这样?
样本i / p = [1 2 3 4 5],k = 2
o / p = [3 4 5 1 2]
void main() {
int i, j = 0, n, a[1000], b[1000], k, t, c = 0;
scanf("%d", &n); // num of ele
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d", &k); // key
t = k;
for(i = 0; i <= k; i++)
{
b[i] = a[t];
t++;
c++; // count
printf("%d ", b[i]);
}
for(i = c; i < n; i++)
{
while(j < k)
{
b[i] = a[j];
j++;
}
}
for(i = 0; i < n; i++)
printf("%d", b[i]);
}
答案 0 :(得分:0)
问题在于混合了两个循环,这些循环要么是对的,要么是对的。更改:
for(i = c; i < n; i++)
{
while(j < k)
{
b[i] = a[j];
j++;
}
}
到
for(i = c; i < n; i++)
{
b[i] = a[j];
j++;
}
或者,
while(j < k)
{
b[i] = a[j];
j++;
i++;
}
您的选择。
但是,最终,对于这种情况,我会使用memcpy
来提高速度,如下例所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
int n;
scanf("%d", &n);
int *a = malloc(n * sizeof(*a));
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
int k;
scanf("%d", &k);
int *b = malloc(n * sizeof(*b));
memcpy(b, &a[k], (n - k) * sizeof(*a));
memcpy(&b[n - k], a, k * sizeof(*a));
for (int i = 0; i < n; i++)
printf("%d ", b[i]);
free(b);
free(a);
return EXIT_SUCCESS;
}