怎么是这样!晕S我偶!

weill 2003-11-11 08:39:51
//自定义一个类
class LS {
public:
char A[4];
char B[4];
char C[4];
};


//程序控制中
String AA = "ABCDEFGHIJKLMNO";
LS LSME;
strcpy(LSME.A ,AA.c_str());
Label1->Caption = LSME.A ;
Label2->Caption = LSME.B ;
Label3->Caption = LSME.C ;

运行结果:

ABCDEFGHIJKLMNO

EFGHIJKLMNO

IJKLMNO

本意是想定义三个固定长度为4的字符串,怎么这想乱七八糟啊?
是不是C语言他奶奶的就没法定义定长的字串啊?

...全文
73 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjy1001 2003-11-12
  • 打赏
  • 举报
回复
"治标不治本:)"
c的特色:你定义 char ch[4];
你也可以使用 ch[1]=ch[100];

要么你用 ljianq(泉深水清) 的方法 给每一个char加多一个字节 保存NULL
要么 你直接定义AnsiString类型 ,因为 Caption 需要的是AnsiString或以NULL结尾的字符的串。
class LS {
public:
AnsiString str1;
AnsiString str2;
AnsiString str3;
};
//程序控制中
AnsiString AA = "ABCDEFGHIJKLMNO";
LS LSME;
str1=AA.SubString(1,4);//取出串中 4个 字符
str2=AA.SubString(5,8);
str3=AA.SubString(9,12);

Label1->Caption = LSME.str1 ;
Label2->Caption = LSME.str2 ;
Label3->Caption = LSME.str3 ;

应该 可以满足你的要求。
Atomictry 2003-11-12
  • 打赏
  • 举报
回复
memcpy( LSME.A, AA.c_str(), sizeof(LSME.A) );
ThinkX 2003-11-12
  • 打赏
  • 举报
回复
在strcpy时,字符串过长,导致内存越界了。
虽然你定义了长度为4的字符数组,但是strcpy可不在乎这个4,它在复制时会按照源字符串的长度来复制的,所以实际上复制了20多个字符。
使用strncpy可以指定复制的长度。
对内存管理很松散正是C/C++的特点,大部分时候它是优点,可以使用不要就是缺点了。
weill 2003-11-12
  • 打赏
  • 举报
回复
to : ljianq(泉深水清)
和和,治标不治本:)
你这样,我也会咯。
ljianq 2003-11-12
  • 打赏
  • 举报
回复
class LS {
public:
char A[5];
char B[5];
char C[5];
};


//程序控制中
String AA = "ABCDEFGHIJKLMNO";
LS LSME;
strcpy(LSME.A ,AA.c_str());
LSME.A[4]='\0';//add '\0' OK!
Label1->Caption = LSME.A ;
Label2->Caption = LSME.B ;
Label3->Caption = LSME.C ;
weill 2003-11-11
  • 打赏
  • 举报
回复
我想问,我的代码里LSME.A到底等于什么啊?
怎么才只取LSME.A里应该取的4个字符?
weill 2003-11-11
  • 打赏
  • 举报
回复
和和,那怎么办啊?
有好办法没啊?
独孤求败_72 2003-11-11
  • 打赏
  • 举报
回复
Label1->Caption 是一个字符串型的数据,字符串的数据是需要结束符的(0x0)
你代码:
Label1->Caption = LSME.A ;
Label2->Caption = LSME.B ;
Label3->Caption = LSME.C ;
完成的结果是:Label1->Caption 的指针从“A”开始直到遇到0x0为止,也就是到了“O”位置
Label2->Caption = LSME.B ;
Label3->Caption = LSME.C ;
道理同上。
weill 2003-11-11
  • 打赏
  • 举报
回复
问题简单,不知大家碰到过没?你们怎么处理的?
我本来是打算做一个单元性的结构的,好把它有格式,有规律象数据库一样输出到文件。
可是这一来可就麻烦大了,一不小心放了一个长度大于定义长度的东西就会吃掉下一个定义的字串(那个字串也许本应是空)。
那玩竟不会自动把过长的吃掉,倒死偶了!
C++怎么是这样啊!

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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