That might work, but it's a rather excessive approach. As guix pointed out, Serial.read() returns one character at a time already. It's not technically a "char", it's a signed 16-bit integer because it returns -1 if there's no data. You could do something like this:
char mystring[STRLEN_MAX];
uint8_t i = 0;
while (Serial.available() && (i < STRLEN_MAX)) {
mystring[i] = Serial.read();
i++;
}
Alternatively, you can skip the available check:
int rcvd;
char mystring[STRLEN_MAX];
uint8_t i;
for (i = 0; i < STRLEN_MAX; i++) {
rcvd = Serial.read();
if (rcvd < 0) break; // Bail out if there's no data
mystring[i] = (char)rcvd;
}