【发布时间】: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 的元素将通过使用未初始化的非静态局部变量的值来调用,这些值是不确定的。