the String class makes dynamic memory allocations and the memory segmentation of heap in the small memory of the mcu is hard to handle, which could lead to crash.
c-string is a char array where the text end is marked with value 0. everywhere where char* or const char* is required it is assumed to be a zero terminated c-string. a const char* s = "123" is the same as const char s[4] = {'1', '2', '3', 0}
functions to work with c-strings are old C functions like strstr, strcmp, strcpy, sprintf etc., or you can try my new library CStringBuilder for printing the c-string the same way you print to Serial or network Client.