gpt4 book ai didi

C:传递和返回指向 char* 的指针

转载 作者:行者123 更新时间:2023-11-30 16:58:10 26 4
gpt4 key购买 nike

我正在尝试通过多个函数解析 char* (每个函数提取消息的一部分),但在函数之间传递指针时遇到问题。在我遇到问题的消息部分中,有一个整数,后跟一个空格字符,然后是一个 double 值。

这一切都在 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),它指向正确的位置(在整数后面的空格处)。但是,当我从主函数或第二个函数中的指针读取字符串时,它没有指向正确的位置。

我想做的是让主函数传递一个指向由第一个函数更新的数组的指针,然后第二个函数获取该指针并使用它。

如有任何帮助,我们将不胜感激。

最佳答案

完整的固定代码,经过测试以确保其正常工作:

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
typedef unsigned char int8_t; // I had to guess
typedef double real;

int8_t extract_gset_id(const char* message, char** pEnd)
{

if ((strlen(message)-13)>0){
int8_t val = (int8_t)( 0xFF & strtol(message+13, pEnd,10));
return val;
}
return -1;
}

real extract_gset_value(const char* message)
{

if ((strlen(message))>0){
//char arr[8];
real val = strtod(message, NULL);
//snprintf(arr, 8, "%2.4f", val); // this line is useless
return val;
}
return -1;

}
int main()
{
char* myMsg = NULL;
char* nLink = NULL;


//SerialQueue_pop(&myMsg, &tablet_queue); //Extract a char* from a buffer
myMsg = "abcdefghijklm129 5678.0";
int8_t id = extract_gset_id(myMsg, &nLink); //Extract the integer from the char*
real value = extract_gset_value(nLink); //Extract the real (float) from the char*
printf("%d, %lf\n",(int)id,value);
}

您的大多数类型都是错误的,特别是在 extract_gset_id 例程中。

第一个参数是消息指针,OK第二个参数是一个 char 上的指针(设置为输出),内部 strtol 在完成解析整数时设置该指针,以便您知道在哪里恢复解析。您必须将指针作为指针传递,以便它可以更改 main 中的值。

一旦你解析了整数,剩下的就几乎没问题了。请注意,我不需要转换任何东西。当您将 char ** 转换为 char * 时,出现了错误。

关于C:传递和返回指向 char* 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39067987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com