我练习指针并且仍然对如何使用指针操作操作2d数组感到困惑。 我希望能够使用指针将oneDim复制到twoDim中。这是如何工作的?
int main() {
char oneDim[] = "string of tests";
char twoDim[2][8];
char *pOne, *pTwo;
return 0;
}
答案 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;
必须删除。