关于Cstring::format()的疑问

huangdi7922 2010-07-16 04:44:27
memset(strRead,0,1024);
strSend="";
len=file.Read(strRead,1024);
if (len<=0) break;
strSend.Format("%d %s",len,strRead);
lenSend=strSend.GetLength();



当len=1024时,第一次lenSend=1029,然后就都是1031了,为什么啊?
急等着用,大家帮忙解释一下
...全文
155 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaanxiwangpeng 2010-07-19
  • 打赏
  • 举报
回复
顶一下
huangdi7922 2010-07-18
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 huangdi7922 的回复:]
自己顶一下
[/Quote]
谢谢,楼上,我在别的地方相似的调试却和这个结果不同,哎,郁闷啊,
不过我知道是cstring的问题,是它的长度变化,并且是读文件才变化,
不管了,我换成char数组了,问题解决了
jingyuge 2010-07-17
  • 打赏
  • 举报
回复
帮忙顶~
huangdi7922 2010-07-16
  • 打赏
  • 举报
回复
自己顶一下
huangdi7922 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 alfwolf 的回复:]

WORD len;用来存放长度
BYTE *buff;用来作为数据缓存
readfile后得到len
buff就new len+sizeof(WORD)大小
把len写进buff前sizeof(WORD),再把strRead写进后面一段缓存
sendto使用buff, 发送的长度就是你new的buff的长度
发送完毕后delete [] buff
[/Quote]

发送的是字符串,怎么写?
huangdi7922 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 huangdi7922 的回复:]

引用 12 楼 sensan 的回复:

char strRead[1025];

memset(strRead,0,1025);
len=file.Read(strRead,1024);
...

试试

变成len=1024,第一次lenSend=1032,然后就都是1034了
[/Quote]
还是一样
jogger007 2010-07-16
  • 打赏
  • 举报
回复
strSend.Format("%d %s",len,strRead);
注意:
%d也是要花空间的。我怀疑strSend有问题。
在获取长度之前strRead[1024] = '\0';试试
huangdi7922 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sensan 的回复:]

char strRead[1025];

memset(strRead,0,1025);
len=file.Read(strRead,1024);
...

试试
[/Quote]
变成len=1024,第一次lenSend=1032,然后就都是1034了
alfwolf 2010-07-16
  • 打赏
  • 举报
回复
WORD len;用来存放长度
BYTE *buff;用来作为数据缓存
readfile后得到len
buff就new len+sizeof(WORD)大小
把len写进buff前sizeof(WORD),再把strRead写进后面一段缓存
sendto使用buff, 发送的长度就是你new的buff的长度
发送完毕后delete [] buff
stonewater 2010-07-16
  • 打赏
  • 举报
回复
memset(strRead,0,1024);
你strRead大小是1024吗
len=file.Read(strRead,1024);
从这儿看你应该至少要1025大小啊
strSend.Format("%d %s",len,strRead);
从这个看,strRead里面要全是字符串,不能有'\0';
huangdi7922 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sensan 的回复:]

char strRead[1025];

memset(strRead,0,1025);
len=file.Read(strRead,1024);
...

试试
[/Quote]

我想过,可是怎么加到数据的前面啊?
我想一次把长度标识和数据加在一起发送过去
cpp2017 2010-07-16
  • 打赏
  • 举报
回复
使用节构体.

struct myData
{
WORD wLen;
char content[1024];

}
sensan 2010-07-16
  • 打赏
  • 举报
回复
char strRead[1025];

memset(strRead,0,1025);
len=file.Read(strRead,1024);
...

试试
huangdi7922 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 alfwolf 的回复:]

如果想加长度,那就不要用这种方式,预留两个字节存放长度就行了,后面的就是你要发送的数据段。
[/Quote]

怎么弄?请指点,急着用,先谢谢了
huangdi7922 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 huangdi7922 的回复:]

这是个udp发送文件的程序,我想在每次发送的数据前面加上长度,对方确认是否正确接收
[/Quote]

1024 ...............
就是比strRead的内容多了"1024 "
alfwolf 2010-07-16
  • 打赏
  • 举报
回复
如果想加长度,那就不要用这种方式,预留两个字节存放长度就行了,后面的就是你要发送的数据段。
huangdi7922 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cpp2017 的回复:]

1031你是哪里看到的?看的时候同时看看内容是什么?
[/Quote]
我要加一个数据长度在数据前面,对方好确认
alfwolf 2010-07-16
  • 打赏
  • 举报
回复
像这样的代码将来lenSend究竟是多少还真难说呢,你的文件是纯文本的吗?文件是ANSI还是UNICODE?
发送数据就行了,为什么还要把数据转换到CString对象?
cpp2017 2010-07-16
  • 打赏
  • 举报
回复
1031你是哪里看到的?看的时候同时看看内容是什么?
huangdi7922 2010-07-16
  • 打赏
  • 举报
回复
这是个udp发送文件的程序,我想在每次发送的数据前面加上长度,对方确认是否正确接收
加载更多回复(4)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧