Если ты хочешь возвращать несколько значений из функции, толучше передавать указатель на переменную в которую нужно сложить результат. Например функция преобразования строки в число может выглядеть так:
void str2int(char *str, int *res, bool *ok) {
// implementation here
}
Первый параметр строка, которую мы преобразовываем в число и складываем по адресу указаному во второй переменной, а по адресу указанному в третей переменной складываем true если в строка успешно была преобразованна в число или false если нет.
Это был общий ответ. А по твоему примеру:
Строки в C являются массивами символов использующими символ '\0' (символ с кодом 0) как признак конца строки. Длинна строки нигде не храниться.
Как уже сказал Mam(O)n нельзя возвращать куазатель на локальную переменную функции, кажется на этот счёт компилятор даже warning выдаёт. Варианта два:
1 возвращать саму структуру, но при этом будет производиться копирование области памяти подайтово, что не хорошо с точки зрения быстродействия.
2 передавать указатель на структуру которая должна быть заполнена внутри функции, а внутри функции её заполнять.
З.Ы. Опять же, присоединяюсь к Mam(O)n'у относительно замечания о наличии функции sprintf