You could use memcpy
.
If the multidimensional array size is given at compile time, i.e mytype myarray[1][2]
, then only a single memcpy call is needed
memcpy(dest, src, sizeof (mytype) * rows * columns);
If, like you indicated the array is dynamically allocated, you will need to know the size of both of the dimensions as when dynamically allocated, the memory used in the array won't be in a contiguous location, which means that memcpy will have to be used multiple times.
Given a 2d array, the method to copy it would be as follows:
char** src;
char** dest;
int length = someFunctionThatFillsTmp(src);
dest = malloc(length*sizeof(char*));
for ( int i = 0; i < length; ++i ){
//width must be known (see below)
dest[i] = malloc(width);
memcpy(dest[i], src[i], width);
}
Given that from your question it looks like you are dealing with an array of strings, you could use strlen to find the length of the string (It must be null terminated).
In which case the loop would become
for ( int i = 0; i < length; ++i ){
int width = strlen(src[i]) + 1;
dest[i] = malloc(width);
memcpy(dest[i], src[i], width);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…