複数の関数(それぞれがメッセージの一部を抽出する)で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)を読み込むと、正しい位置(整数の直後のスペース)を指しています。しかし、私は私のメイン関数または2番目の関数でポインタから文字列を読むとき、それは正しい場所を指していません。
私がしようとしているのは、main関数に最初の関数で更新された配列へのポインタを渡し、次に2番目の関数がそのポインタを受け取り、それを使用することです。
ご協力いただければ幸いです。
'char ** ptr;'は、charポインタへのユニット化されたポインタを作成します。逆参照すると、無効なポインタがあります。これはおそらくあなたの問題を引き起こします。 – kaetzacoatl
"*' real' * "?ターボCでこれを持っていたのですか? – alk
@kaetzacoatl: 'ptr'は' strtol() 'の呼び出しによって設定されます。 – alk