gpt4 book ai didi

c - 从函数获取字符指针

转载 作者:太空狗 更新时间:2023-10-29 15:28:46 26 4
gpt4 key购买 nike

如果它太基础,请原谅我,但我会崩溃,而且我似乎不太了解。

我有一个全局变量:

char *incomingData="";

然后我有这个函数可以从一些硬件中获取一些数据:

void readWifDataAsSever(char* reqData)
{
char data[100]={0};
//...
if (len > 0)
{

for(uint32_t i = 0; i < len; i++)
data[i]=(char)buffer[i];

ParseGetRequest( data ); //some other manipulation
reqData=data;
}
else
reqData="";

}

然后我试图从另一个地方调用那个函数,给它全局变量,并从函数中获取新数据:

readWifDataAsSever(incomingData);  //incoming data is the global i just show
//check length of incomgin data

很明显,不仅我做错了事,我也没有真正理解指针。

我知道数据的生​​命只存在于函数中。

我试图理解为什么这是错误的,以及您应该如何真正做到这一点。谢谢。

最佳答案

您尝试执行的操作是不允许的,因为 readWifDataAsSever 退出时 data 变得无效。通过任何可能仍指向它的指针访问它是未定义的行为。

但是,您的程序甚至没有这样做:因为您按值传递了 reqData 指针,所以对它的任何赋值对调用者都没有影响,即

reqData=data;

不会改变函数调用者看到的内容。

为了解决这个问题,您需要做以下两件事之一:

  • 将有效的缓冲区连同其长度传递给函数,或者
  • 在函数内部进行动态分配,并让调用者释放结果。

由于您在资源有限的嵌入式系统上工作,第一种方法最适合您的情况:

size_t readWifDataAsSever(char* reqData, size_t maxLen) {
if (len > 0) {
size_t activeLength = len < maxLen ? len : maxLen;
for(size_t i = 0 ; i < activeLength ; i++) {
reqData[i]=(char)buffer[i];
}
return activeLength;
} else {
reqData[0] = '\0';
return 0;
}
}

关于c - 从函数获取字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33039930/

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