将值从一个数组复制到另一个数组

时间:2016-05-04 17:46:27

标签: c arrays debugging

它应该很简单,两个数组,一个有另外5个,有6个元素。

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int i=0;
    int k=0;
    int v[5] = {2,3,4,5,6};
    int g[6];

    for( i = 1; i <= 6; i++ ){
        k= i + 1;
        if ( 1 == i && 2 == i)
        {
            g[k]=v[i];
        }
        else
        {
            g[k]=(v[i]+10);
        }

        printf("%d\n",g[k]);
    }

    return 0;
}

我得到了这个

13
14
15
16
32776
10

我真的很想

2 3 13 14 15 16

我的错误在哪里?我应该创建功能还是什么?

3 个答案:

答案 0 :(得分:6)

问题1

数组索引从0开始,意味着v[0]g[0]是数组的第一个元素。您的ik所有人都被一个人拒绝了。

问题2

1 == i && 2 == i永远不会成真。如果是1 == i,那么2 != i。如果是2 == i,那么1 != i

1 == i && 2 == i

应该是

1 == i || 2 == i

问题3

你的循环有5次传递,但它需要6次!

1) g[0] = v[0];
2) g[1] = v[1];
3) g[2] = v[1]+10;
4) g[3] = v[2]+10;
5) g[4] = v[3]+10;
6) g[5] = v[4]+10;

解决方案

#include <stdlib.h>
#include <stdio.h>

int main() {
    int v[5] = {2,3,4,5,6};
    int g[6];

    for( int i = 0; i < sizeof(g)/sizeof(*g); ++i ) {
        if ( 0 == i || 1 == i )
           g[i] = v[i];
        else
           g[i] = v[i-1]+10;

        printf("%d\n", g[i]);
    }

    return 0;
}

请注意

if ( 0 == i || 1 == i )

可以简化为

if ( 2 < i )

答案 1 :(得分:5)

您的代码存在一些问题:

  • if ( 1 == i && 2 == i)将始终返回false,因为变量不能同时为1和2。
  • 你的循环迭代器获取的值大于它们应该的值;当i变为56时,v[i]g[i]会触发超出相应数组内存范围的内存位置,这会解释您的随机值输出。

我认为这就是你想要的:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int i = 0;
    int v[5] = {2, 3, 4, 5, 6};
    int g[6];

    for ( i = 0; i < 6; i++ )
    {
        if ( i < 2 )
        {
            g[i] = v[i];
        }

        else
        {
            g[i] = ( v[i - 1] + 10 );
        }

        printf ( "%d\n", g[i] );
    }

    return 0;
}

输出:

2 3 13 14 15 16

答案 2 :(得分:1)

它永远不会进入 if 条件块,因为我不能同时为1和2 ..
所以你的代码将进入其他...
它将从索引1开始;
所以在这个来自else的表达中:g[k]=(v[i]+10); --- v[i]=> 3当你到达索引5或6时,它就在你的v数组之外......

for( i = 1; i <= 6; i++ ){
        k= i + 1;
        if ( 1 == i && 2 == i) //never enter here...
        {
            g[k]=v[i];
        }
        else
        {
            g[k]=(v[i]+10); //index get outside the vector length
        }

        printf("%d\n",g[k]);
    }
相关问题