Я пытаюсь разобрать char * через несколько функций (каждый из них извлекает часть сообщения), и мне трудно передать указатели между функциями. В части сообщения, с которым у меня возникают проблемы, есть целое число, за которым следует пробельный символ, за которым следует двойной.C: Передача и возврат указателей на символ *
Все это работает на STM32F4:
Основная функция:
char* myMsg = NULL;
char* nLink = NULL;
SerialQueue_pop(&myMsg, &tablet_queue); //Extract a char* from a buffer
uint8_t id = extract_gset_id(myMsg, (char*)&nLink); //Extract the integer from the char*
real value = extract_gset_value((char*)&nLink); //Extract the real (float) from the char*
функции:
int8_t extract_gset_id(char* message, char* pEnd)
{
char** ptr;
if ((strlen(message)-13)>0){
int8_t val = (int8_t)(0xFF & strtol(message+13, &ptr,10));
*pEnd = ptr;
return val;
}
return -1;
}
real extract_gset_value(char* message)
{
if ((strlen(message))>0){
char arr[8];
real val = strtod(message, NULL);
snprintf(arr, 8, "%2.4f", val);
return val;
}
return -1;
}
Вызов Первая функция должна извлечь целое число, начиная с символа 13 строки , Это отлично работает, и если после вызова strtol я читаю возвращаемый указатель (nLink), он указывает на правильное местоположение (в пространстве сразу после целого числа). Однако, когда я читаю строку из указателя в моей основной функции или во второй функции, она не указывает на правильное местоположение.
То, что я пытаюсь сделать, состоит в том, чтобы основная функция передавала указатель на массив, который обновляется первой функцией, затем вторая функция принимает этот указатель и использует его.
Любая помощь будет оценена по достоинству.
'char ** ptr;' создает унифицированный указатель на указатель char. Когда вы разыгрываете это, у вас есть неверный указатель. Это, вероятно, вызывает вашу проблему. – kaetzacoatl
"*' real' * "? Если бы у нас это было в Turbo-C? – alk
@kaetzacoatl: 'ptr' задается вызовом' strtol() '. – alk