[英]Copying one array into another using pointers and array indexing
我编写了一个程序,它使用数组索引和指针将一个数组复制到另一个数组中。 我要解决的问题是当我 go 打印原始数组和指针方法的新数组时,我得到相同的东西(即复制的数组),而我真正想要的是打印原始数组,然后是新数组复制的数组。 (下面更清楚)
代码
/*
Program to copy the contents of a one-dimensional character array
into another one-dimensional character array using
2 different methods(Pointers and Array Indexing)
*/
#include <stdio.h>
// Declaring both functions
void copyArrayIndexWay(char * const newArray1, const char * const originalArray1);
void copyPointerWay(char *newArray2, const char *originalArray2);
// Little explanation - I declared both arrays here instead of in my main so that my variable size can get the size of
// either array which is used in the for loops for both functions. Hence why I had to delcare it all here if I
// wanted both functions to be able to access the size variable
char array1[] = "deeznuts";
char array2[] = "gotem";
// Declaring variables i and size here which will allow both functions to call them
int size = sizeof(array1), i = 0;
int main(){
// copy 1 into 2
copyArrayIndexWay(array2, array1);
copyPointerWay(array2, array1);
}
// Functin to copy contents using array indexing
void copyArrayIndexWay(char * const newArray, const char * const originalArray){
printf("--Copying Using Array Indexing--\n");
printf("Original Array: %s\n", newArray);
for (i=0; i<size; i++){
newArray[i] = originalArray[i];
}
printf("New Array: %s\n\n\n", newArray);
}
// Function to copy contents using pointers
void copyPointerWay(char *newArray2, const char *originalArray2){
// declare pointers and assign both arrays to a pointer each
const char *orig_arrayPtr;
orig_arrayPtr = originalArray2; // array1
char *new_arrayPtr;
new_arrayPtr = newArray2; // array2
printf("--Copying Using Pointers--\n");
printf("Original Array: %s\n", new_arrayPtr);
for (i=0; i<size; i++){
new_arrayPtr[i] = orig_arrayPtr[i];
}
printf("New Array: %s\n", new_arrayPtr);
}
OUTPUT
--Copying Using Array Indexing--
Original Array: gotem
New Array: deeznuts
--Copying Using Pointers--
Original Array: deeznuts
New Array: deeznuts
使用指针的复制应该打印与数组索引方法相同的原始数组,但由于某种原因,它会打印新数组。 任何关于为什么会发生这种情况的建议或解释将不胜感激,谢谢:)
打电话后
copyArrayIndexWay(array2, array1);
array2
和array1
具有相同的内容 (deeznuts)。 那么在通话中
copyPointerWay(array2, array1);
你通过“deeznuts”两次。
实际上,您通过越界访问array2
来调用未定义的行为,因为它比“deeznuts”短。 但是你很幸运没有访问你不应该访问的 memory。
您可以通过多种方式解决问题,我的建议是仅传递您想要复制的原始数组(deeznuts),然后在每个 function 中声明一个足够大的数组以包含您正在传递的数组。
调用 copyPointerWay 时,Array2 已经充满了“deeznuts”。
您观察到的行为被解释为:
最初array2
包含“gotem”
调用copyArrayIndexWay
后, array2
包含“deeznuts”
调用copyPointerWay
时, array2
包含“deeznuts”,并且“deeznuts”再次写入此位置。 这就是为什么您无法观察到内容的变化。
在调用copyArrayIndexWay
之后,您可以为array2
分配另一个值。 这样,您将观察到内容的差异。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.