여러 함수 (각 함수는 메시지의 일부를 추출 함)를 통해 char *를 구문 분석하려고하며 함수간에 포인터를 전달하는 데 문제가 있습니다. 문제가있는 메시지 부분에는 공백 문자와 그 뒤에 이중 문자가 오는 정수가 있습니다. C : char에 대한 포인터 전달 및 반환 *
이
모두는 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
"*'진짜'*"? 터보 -C에서 이걸 가지고 있었나요? – alk
@kaetzacoatl :'ptr'은'strtol()'호출에 의해 설정됩니다. – alk