我有一段代码(函数),在这里我收到一个输入缓冲区数据包作为第一个参数,其长度作为第二个参数。我正在接收的缓冲区包含一些需要的数据,但是还包含一些垃圾值。我只需要打印实际数据(忽略垃圾值)。我怎么做?

这里是(简化版本)代码:

void decodeResp(char* in_buf, int *Len)
{
    char msg_buffer[100]    =   {0};

    memcpy(msg_buffer,(in_buf),*Len);

    printf("\n********** Response Recieved: [%s] **********\n",msg_buffer);
}


假设如果in_buf包含ACTUAL_DATA+(some garbage),则我只需要忽略垃圾值就打印“ ACTUAL_DATA”。我该如何支票?上面的代码会打印所有内容。

提前致谢。

最佳答案

首先,您打算如何区分ACTUAL DATA和垃圾?

如果在调用此函数之前已知ACTUAL DATA的大小,请在*len中发送该值,针对该特定大小执行memcpy() [不要忘记添加尾随的\0用作字符串]。

如果需要在decodeResp()内进行检查,请过滤in_buf,计算ACTUAL DATA的长度,对该尺寸进行memcpy()并打印。



编辑

看来您正在通过某些socket接收数据包。您可以利用recv()调用的返回值将*len提供给decodeResp(),以防万一您正在使用一些未初始化的缓冲区来接收传入的数据包。

关于c - 接收的缓冲区包含带有一些垃圾值的实际数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25784946/

10-11 22:56
查看更多