Depends, and probably better to use C strings:
If you know the number is always the same amount of characters, use the C function
You can also split on a delimiter (char), with
strtok, but in your case this is not possible since you don't know the delimiter character.
If the number has a variable length, start copying character by character through the string, until you find a character that gives false for the
isdigit condition and copy the remainder (with strncpy) to the other string.
Update after the question's edit
Since the number of text to be copied is know, strncpy can be used with the following prototype:
char *strncpy(char *dest, const char *src, size_t n)
In your case put the text in a normal text string:
char text; /* Assuming max length of text */
Copy it where needed:
strcpy(text, "77953505HELLO THIS IS A MESSAGE");
Note: it can be done in once like this:
char text = "77953505HELLO THIS IS A MESSAGE";
Than you can copy the items by:
char number; // Add 1 for \0
char message; // Assuming max length of message;
strncpy(number, text, 8);
strncpy(message, &(text), strlen(text) - 8);
(Note not checked with compiler).
Improvements: use instead of 8 a define e.g.
#define NUMBER_LENGTH 8
char number[NUMBER_LENGTH + 1];
strncpy(number, text, NUMBER_LENGTH);
strncpy(message, &(text), strlen(text) - NUMBER_LENGTH);
You can do similar for MESSAGE LENGTH
#define MESSAGE_LENGTH 80
Also, another improvement is not to copy the message, but just set the pointer to the correct place:
char* message = &(text);
message will point to "HELLO THIS IS A MESSAGE"
"77953505HELLO THIS IS A MESSAGE"
+-- text |
In an Arduino 80 bytes can be a lot of memory, using two buffers cost 160 bytes, and this way you save at least one buffer.