【问题标题】:How can I copy one array to another in C and get two separate arrays?如何在 C 中将一个数组复制到另一个数组并获得两个单独的数组?
【发布时间】:2020-12-06 08:38:06
【问题描述】:

我需要将一个数组复制到另一个数组,然后在不影响原始数组的情况下更改复制的数组。 我试过了:

memcpy(statesVactor,denominatorFactors,n *sizeof(int));

memmove(statesVector,denominatorFactors,n *sizeof(int));
但是当我将 statesVector 乘以 -1 时, denominatorFactors 也会乘以​​。 我觉得,我不明白……简单的。

编辑:

int n = 0; 
int denominatorFactors[n];
int statesVector[n];
 scanf("%d", &n);
memmove(statesVector,denominatorFactors,n *sizeof(int)); //or 
//memcpy(statesVactor,denominatorFactors,n *sizeof(int)); 

for(int i = 0; i<n;i++){
        statesVector[i] = -1 * statesVector[i];
    }

for(int i = 0; i<n;i++){
        printf("%d\t",statesVector[i]);
    }
for(int i = 0; i<n;i++) {
         printf("%d",denominatorFactors[i]);
        }

【问题讨论】:

  • 请发帖Minimal, Reproducible Example。你确定你分配了 2 个数组而不是像 int statesVactor[n]; int* denominatorFactors = statesVactor; 那样做吗?
  • 我添加了更多代码。我希望它会更好。我真的不确定我在做什么。我一直使用 Java,这是我在 C 语言中的第一个项目,而且一切都......不同。我想我做了你建议我不应该做的事。
  • 不允许分配像int n = 0; int denominatorFactors[n]; 这样的零元素数组。数组元素的数量必须大于零。 (参考:N1570 6.7.6.2 数组声明符的第 5 段)
  • 你是对的,我的错。忘记添加 scanf("%d", &n);
  • 读取n必须在数组声明之前。 statesVector 的元素也应该在循环之前初始化,undefined behavior 的元素将通过使用未初始化的非静态局部变量的值来调用,这些值是不确定的。

标签: arrays c copy


【解决方案1】:

你不能将数组的大小初始化为 0 (int n = 0; int denominatorFactors[n])

您在读取之前的大小后声明您的数组

#include<stdio.h>

int main(void)
{
    int size;
    do
    {
         printf("Give the size of your array :");
         scanf("%d",&size);
    }while(size <1);
    int statesVector[size];
    int denominatorFactors[size];
    for(int i = 0; i<size;i++)
    {
        printf("Give me the %d elment :",i);
        scanf("%d",&statesVector[i]);
        denominatorFactors[i] = statesVector[i];
    }
    printf("\n\nDisplay of the original array :\n\n");
    for(int i = 0; i<size;i++)
    {
        printf("[%d]\t",statesVector[i]);
    }
    printf("\n\nDisplay of the copy of array :\n\n");
    for(int i = 0; i<size;i++)
    {
        denominatorFactors[i]*=-1;
        printf("[%d]\t",denominatorFactors[i]);
    }
    printf("\n");
    return 0;
}

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2018-04-01
    • 2019-12-24
    • 2013-06-05
    • 2010-10-18
    相关资源
    最近更新 更多