如何给string类型指定固定长度,如string abc(10),abc长度固定为10.

jincai78 2003-04-25 03:13:25
如何给string类型指定固定长度,如string abc(10),abc长度固定为10.
如何声明呢?
char chabc[10]; //占用10个字节
string strabc(10); //如何分配使它能固定的占用10个字节
...全文
4371 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangx105504 2003-04-30
  • 打赏
  • 举报
回复 2
string str;
str.resize(10);
dhfly 2003-04-28
  • 打赏
  • 举报
回复
用向量:
#include<vector>
vector<string>abc(10);
jincai78 2003-04-28
  • 打赏
  • 举报
回复
我已经从大家的回答中得到许多启发,再次特表感激。

结构的长度可以用sizeof(CAstroDataHeader);得到 ,本没问题,但该结构中装有数据后会变大(string是个可变长度的类型);

那么在开始时指string的长度不就没有意义了么: 这样我就在发送端和接收端知道了该结构的长度了。


我用将该结构的长度通过网络发送的方法将这个问题解决了。
我会尽快结账的。

rtdb 2003-04-25
  • 打赏
  • 举报
回复
> 我已经可以成功的将数据拷贝到一个缓冲区中了

若是你在发送前又拷贝到另一个缓冲区中, 那么在开始时指string的长度不就没有意义了么。 你在拷贝时指定长度即可。
fangrk 2003-04-25
  • 打赏
  • 举报
回复
结构的长度可以用sizeof(CAstroDataHeader);得到


字符串的长度可以用size_t string::size() const;得到
jincai78 2003-04-25
  • 打赏
  • 举报
回复
加把油,伙计!: 我之所以要指定长度是因为我要在接收端判断这个结构的长度;


: rtdb(东临碣石)
我已经可以成功的将数据拷贝到一个缓冲区中了,我想应该是可以发送的。



rtdb 2003-04-25
  • 打赏
  • 举报
回复
你是想把CAstroDataHeader这个结构直接发送吧?

那么就不可以用string了。因为string中的数据是用指针另存在其它地方的,
只发送string是没用的, 要换回用char.
fangrk 2003-04-25
  • 打赏
  • 举报
回复
不过在这个程序中指定长度似乎没有用。
构造函数可以加上参数直接生成一个实例
fangrk 2003-04-25
  • 打赏
  • 举报
回复
#include <string>
#include <iostream>
using namespace std;
struct CAstroDataHeader
{
string MSGType;
unsigned int nPriority;
//char DestAddr[15];
string DestAddr;
unsigned int nDestPort;
//char SourceAddr[15];
string SourceAddr;
unsigned int nSourcePort;
unsigned int nDataOffset;
//char others[8];
string others;
CAstroDataHeader():
MSGType(string(8,'\0')),
DestAddr(string(15,'\0')),
SourceAddr(string(15,'\0')),
others(string(8,'\0')){}
} ;




void main()
{
CAstroDataHeader header;
header.DestAddr="192.168.1.100";
header.nDestPort=3000;
header.MSGType="dat";
}
jincai78 2003-04-25
  • 打赏
  • 举报
回复

typedef struct _AstroDataHeader
{
//char MSGType[8];
string MSGType(8,'\0'); //error C2059: syntax error : 'constant'
unsigned int nPriority;
//char DestAddr[15];
string DestAddr;
unsigned int nDestPort;
//char SourceAddr[15];
string SourceAddr;
unsigned int nSourcePort;
unsigned int nDataOffset;
//char others[8];
string others;
} CAstroDataHeader;




void main()
{
CAstroDataHeader header;
header.DestAddr="192.168.1.100";
header.nDestPort=3000;
header.MSGType="dat"; //error is here , error C2659: '=' : overloaded function as left operand

}
rtdb 2003-04-25
  • 打赏
  • 举报
回复
Show me data.h(20) and TStruct.cpp(26) 上下各十行。
jincai78 2003-04-25
  • 打赏
  • 举报
回复
出现了一下错误:


--------------------Configuration: TStruct - Win32 Debug--------------------
Compiling...
TStruct.cpp
d:\vc-study\tstruct\data.h(20) : error C2059: syntax error : 'constant'
D:\VC-Study\TStruct\TStruct.cpp(26) : error C2659: '=' : overloaded function as left operand
Data.cpp
d:\vc-study\tstruct\data.h(20) : error C2059: syntax error : 'constant'
Generating Code...
Error executing cl.exe.

TStruct.exe - 3 error(s), 0 warning(s)
rtdb 2003-04-25
  • 打赏
  • 举报
回复
string strabc(10, '\0');
or
strabc.resize(20) ;

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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