I hope I get this right. You have two questions. You want know how to assign the value of char mapname[50]; via void setmapname(char newmapname[50]);. And you want to know how to create a dynamic size 2D array. 
I hope you are comfortable with pointers because in both cases, you need it. 
For the first question, I would like to first correct your understanding of void setmapname(char newmapname[50]);. C++ functions do not take in array. It take in the pointer to the array. So it is as good as writing void setmapname(char *newmapname);. For better understanding, go to Passing Arrays to Function in C++
With that, I am going to change the function to read in the length of the new map name. And to assign mapname, just use a loop to copy each of the char.
void setmapname(char *newmapname, int length) {
    // ensure that the string passing in is not 
    // more that what mapname can hold.
    length = length < 50 ? length : 50;
    // loop each value and assign one by one. 
    for(int i = 0; i < length; ++i) {
        mapname[i] = newmapname[i];
    }
}
For the second question, you can use vector like what was proposed by Garf365  need to use but I prefer to just use pointer and I will use 1D array to represent 2d battlefield. (You can read the link Garf365 provide).
// Declare like this
char *casestatematricia; // remember to initialize this to 0.
// Create the battlefield
void Map::battlespace(int column, int line) {
    columnnumber = column;
    linenumber = line;
    // Clear the previous battlefield.
    clearspace();
    // Creating the battlefield
    casestatematricia = new char[column * line];
    // initialise casestatematricia...
}
// Call this after you done using the battlefield
void Map::clearspace() {
    if (!casestatematricia) return;
    delete [] casestatematricia;
    casestatematricia = 0;
}
Just remember to call clearspace() when you are no longer using it. 
Just for your benefit, this is how you create a dynamic size 2D array
// Declare like this
char **casestatematricia; // remember to initialize this to 0.
// Create the battlefield
void Map::battlespace(int column, int line) {
    columnnumber = column;
    linenumber = line;
    // Clear the previous battlefield.
    clearspace();
    // Creating the battlefield
    casestatematricia = new char*[column];
    for (int i = 0; i < column; ++i) {
        casestatematricia[i] = new char[line];
    }
    // initialise casestatematricia...
}
// Call this after you done using the battlefield
void Map::clearspace() {
    if (!casestatematricia) return;
    for(int i = 0; i < columnnumber; ++i) {
        delete [] casestatematricia[i];
    }
    delete [][] casestatematricia;
    casestatematricia = 0;
} 
Hope this help.
PS: If you need to serialize the string, you can to use pascal string format so that you can support string with variable length. e.g. "11hello world", or "3foo".