使用C中的指针将数据从一维数组复制到二维数组?

时间:2014-09-30 14:57:22

标签: c pointers

我练习指针并且仍然对如何使用指针操作操作2d数组感到困惑。 我希望能够使用指针将oneDim复制到twoDim中。这是如何工作的?

int main() {

    char oneDim[] = "string of tests";
    char twoDim[2][8]; 
    char *pOne, *pTwo;

    return 0; 
}

1 个答案:

答案 0 :(得分:1)

目前尚不清楚如何在二维数组中复制一维数组。一种方法是以下

#include <stdio.h>
#include <string.h>

int main(void) 
{
    char oneDim[] = "string of tests";
    char twoDim[2][8]; 
    char *pOne, *pTwo;

    pOne = oneDim;
    pTwo = twoDim[0];

    memcpy( pTwo, pOne, sizeof( twoDim[0] ) - 1 );
    pTwo[sizeof( twoDim[0] ) - 1] = '\0';

    pTwo = twoDim[1];
    pOne += sizeof( twoDim[0] ) - 1;

    strncpy( pTwo, pOne, sizeof( twoDim[1] ) - 1);
    pTwo[sizeof( twoDim[1] ) - 1] = '\0';

    printf( "\"%s\"\n", twoDim[0] );
    printf( "\"%s\"\n", twoDim[1] );

    return 0;
}   

输出

"string "
"of test"

考虑到这个词&#34;测试&#34;未完全复制,因为使用此方法时二维数组中没有足够的字符。

另一种方法很简单。:)

#include <stdio.h>
#include <string.h>

int main(void) 
{
    char oneDim[] = "string of tests";
    char twoDim[2][8]; 
    char *pOne, *pTwo;

    pOne = oneDim;
    pTwo = twoDim[0];

    strcpy( pTwo, pOne );

    printf( "\"%s\"\n", pTwo );
    return 0;
}   

输出

"string of tests"

如果您可能不使用标准C字符串函数,那么例如调用

    memcpy( pTwo, pOne, sizeof( twoDim[0] ) - 1 );

可以替代循环

for ( size_t i = 0; i < sizeof( twoDim[0] ) - 1; i++ ) pTwo[i] = pOne[i];

或者你可以写

while ( pTwo < twoDim[0] + sizeof( twoDim[0] ) - 1 ) *pTwo++ = *pOne++;
*pTwo = '\0';

在本案例陈述中

    pOne += sizeof( twoDim[0] ) - 1;

必须删除。