TcpWrite()函数中的问题

来源:4-2 解决TCP粘包和分包的问题

weixin_慕娘6306342

2023-08-06

https://img.mukewang.com/szimg/64cf648e09ed529712510454.jpg

上面的代码是在数组中开辟4个字节来存放数据的长度,

所以我写了下面代码,也是用数组前四个字节存放数据长度,后面的字节存放字符串内容?

但是为什么我输出字符串的数据时,只是输出了一个1? 输出的内容不应该是字符的长度和字符串的内容嘛?

输出字符串的长度时,长度为1? 字符串的长度不应该是字符串的长度加4个字节嘛?

#include<stdio.h>
 #include <arpa/inet.h>
#include<string.h>

int main()
{
        char str[1024];

        char *ptr=(char*)"厉害的很嘞啊实打实大萨达所大所多.";
        int ilen=strlen(ptr);  


        printf("str=%s,len=%d\n",str,strlen(str));
        
        memcpy(str,&ilen,4);
        memcpy(str+4,ptr,strlen(ptr));
        
        printf("str=%s,len=%d\n",str,strlen(str));

        return 0;
}


结果:

https://img.mukewang.com/szimg/64cf6540096eb94809260357.jpg


写回答

1回答

长歌_吴从周

2023-08-07

你要把字符串的长度从Str中解析出来。

代码这么写:

#include<stdio.h>

#include <arpa/inet.h>

#include<string.h>


int main()

{

  char str[1024];


  char *ptr=(char*)"厉害的很嘞啊实打实大萨达所大所多.";

  int ilen=strlen(ptr);


  printf("str=%s,len=%d\n",str,strlen(str));


  memcpy(str,&ilen,4);

  memcpy(str+4,ptr,strlen(ptr));


  memcpy(&ilen,str,4);  // 解析出长度。

  printf("str=%s,len=%d\n",str+4,ilen);  // str要加4


  return 0;

}


https://img.mukewang.com/szimg/64d074da09d9dc5514100238.jpg

0
2
长歌_吴从周
回复
weixin_慕娘6306342
是对的
2023-08-09
共2条回复

C/C++气象数据中心实战,手把手教你做工业级项目

通过技术的实际应用,掌握等同2年经验的技术能力

968 学习 · 401 问题

查看课程