使用C中的指针将数组的内容复制到多维数组?

时间:2014-10-01 05:04:47

标签: c arrays pointers copy

 //Given this snippet of code:

    int main() {
        char sample[] = "Hello World";
        char ma[2][6]; 
        char *sptr, *mptr;

        return 0; 
    }
我正在考虑这个问题。 sptr是指向数组样本的指针,mptr是指向数组ma的指针。我是否首先需要引用指向各自数组的指针,并遍历数组ma的每个维度,并递增两个指针并将它们设置为相等?  这是我到目前为止所写的内容

int main(){
char sample[] = "Hello World"; // Create an arry of char  to hold the string "Hello World"
char ma[2][6];    //Create an two dimensional array of char  with 2 rows and  6 columns
char *sptr, *mptr; // Create two pointer variables of type char that are used to copy the content from array sample into array ma
char*sptr = sample;
char*mptr = ma; 
int row;
int column;

for (row = 0; row < 2; row++) {
    for (column = 0; column < 6; column++){
        *sptr++ = *mptr++;
    }
}



return 0;

1 个答案:

答案 0 :(得分:0)

鉴于,

char sample[] = "Hello World";
char ma[2][6];
char *sptr, *mptr;

可以使用

sptr = sample;

但不是

char*sptr = sample;

您无法定义变量两次。

mptr行有一个不同的问题。你当然无法重新定义变量。但是,您无法使用

mptr = ma; 

在上面的语句中,ma衰减为类型为char (*)[6]的值,即指向6 char数组的指针。 mptr的类型不是。

为了使用

mptr = ma; 

您必须将mptr定义为:

char (*mptr)[6];

在循环中。

for (row = 0; row < 2; row++) {
    for (column = 0; column < 6; column++){
        *sptr++ = *mptr++;
    }
}

有几个问题。

下面这一行有问题。

        *sptr++ = *mptr++;

然而,这可能是由于您对如何使用mptr的误解。

此外,您的问题表明您想要将1D数组的内容复制到2D数组。您需要在赋值运算符的LHS上包含一个涉及mptr的表达式,并在表达式的RHS上包含一个涉及sptr的表达式。

然后,您已经弄清楚如何将1D阵列的内容划分为2D阵列。您希望6的第一个sptr字符位于ma[0]吗?您是否希望m[0]m[1]为空终止字符串?

并且,当1D数组的长度太大而无法放入ma提供的空间时,该怎么办?如果ma[0]ma[1]为空终止字符串,ma最多可以包含一个长度为10的字符串。

并且,如果已经到达1D字符串的末尾,则必须添加逻辑以突破for循环。

这是开始的事情。

for (row = 0; row < 2 && *sptr != '\0'; row++) {

    // No matter when the iteration stops,
    // mptr[row] will be a valid null terminated string.
    mptr[row][0] = '\0';

    // Don't use all the elements of the array.
    // Leave the last element for the terminating null character. 
    for (column = 0; column < 5 && *sptr != '\0'; column++){
        mptr[row][column] = *sptr++;

        // No matter when the iteration stops,
        // mptr[row] will be a valid null terminated string.
        mptr[row][column+1] = '\0';
    }
}