0

我正在读取一个数据包,但我需要从数据包中删除前四个字节和最后一个字节以获得我需要的内容,你将如何在 C 中执行此操作?

/* Build an input buffer of the incoming message. */
    while ( (len=read(clntSocket, line, MAXBUF)) != 0)
    {
            msg = (char *)malloc(len + 1);
            memset(msg, 0, len+1);
            strncpy(msg, line, len);
        }
    }

传入的数据是 char 和 int 数据的混合。

4

2 回答 2

0

您可以更改strncpy源地址:

while ( (len=read(clntSocket, line, MAXBUF)) != 0)
{
        msg = (char *)calloc(len -3, 1); // calloc instead of malloc + memset
        strncpy(msg, line+4, len);
    }
}

PS:我假设那行是char*.

于 2013-01-14T22:37:27.733 回答
0

如果 line 是 char *,您可以简单地从 (line + 4) 开始复制,它看起来是。并复制比 len 少 5 个字节,这将丢弃最后一个字节。

即使其非常明确(假设您之前的 malloc 会在缓冲区末尾留下一些安全性)。

char *pFourBytesIn = (line + 4);
int adjustedLength = len - 5;
strncpy(msg, pFourBytesIn, adjustedLength);
msg[adjustedLength] = '\0';
于 2013-01-14T22:23:33.790 回答