导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

关于Cstring::format()的疑问

皇帝 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了,为什么啊?
急等着用,大家帮忙解释一下
...全文
124 点赞 收藏 24
写回复
24 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
shaanxiwangpeng 2010-07-19
顶一下
回复
皇帝 2010-07-18
[Quote=引用 21 楼 huangdi7922 的回复:]
自己顶一下
[/Quote]
谢谢,楼上,我在别的地方相似的调试却和这个结果不同,哎,郁闷啊,
不过我知道是cstring的问题,是它的长度变化,并且是读文件才变化,
不管了,我换成char数组了,问题解决了
回复
jingyuge 2010-07-17
帮忙顶~
回复
皇帝 2010-07-16
自己顶一下
回复
皇帝 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]

发送的是字符串,怎么写?
回复
皇帝 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';试试
回复
皇帝 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';
回复
皇帝 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);
...

试试
回复
皇帝 2010-07-16
[Quote=引用 9 楼 alfwolf 的回复:]

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

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

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

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

1031你是哪里看到的?看的时候同时看看内容是什么?
[/Quote]
我要加一个数据长度在数据前面,对方好确认
回复
alfwolf 2010-07-16
像这样的代码将来lenSend究竟是多少还真难说呢,你的文件是纯文本的吗?文件是ANSI还是UNICODE?
发送数据就行了,为什么还要把数据转换到CString对象?
回复
cpp2017 2010-07-16
1031你是哪里看到的?看的时候同时看看内容是什么?
回复
皇帝 2010-07-16
这是个udp发送文件的程序,我想在每次发送的数据前面加上长度,对方确认是否正确接收
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

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