首页 > 解决方案 > 使用指针和数组索引将一个数组复制到另一个数组

问题描述

我编写了一个程序,它使用数组索引和指针将一个数组复制到另一个数组中。我要解决的问题是,当我为指针方法打印原始数组和新数组时,我得到相同的东西(即复制的数组),而我真正想要的是打印原始数组,然后是新数组复制的数组。(下面更清楚)

代码

/* 
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);

}

输出

--Copying Using Array Indexing--
Original Array: gotem
New Array: deeznuts


--Copying Using Pointers--
Original Array: deeznuts
New Array: deeznuts

使用指针的复制应该打印与数组索引方法相同的原始数组,但由于某种原因,它会打印新数组。任何关于为什么会发生这种情况的建议或解释将不胜感激,谢谢:)

标签: arrayscfunctionpointers

解决方案


您观察到的行为被解释为:

最初array2包含“gotem”

调用后copyArrayIndexWayarray2包含“deeznuts”

调用时copyPointerWayarray2包含“deeznuts”,“deeznuts”再次写入此位置。这就是为什么您无法观察到内容的变化。

您可以array2在调用 后为 分配另一个值copyArrayIndexWay。这样,您将观察到内容的差异。


推荐阅读