您现在所在的是:

施耐德电气论坛

回帖:2个,阅读:425 [上一页] [1] [下一页]
8132
0aguang0
文章数:1636
年度积分:255
历史总积分:8132
品牌积分(施耐德):2046
注册时间:2010/10/21
发站内信
发表于:2019/11/10 21:24:49
#0楼
此贴内容大部分来自<施耐德somachine控制器应用技巧120例>中的1.3.21章节
创建一个字符串数组变量
var_global
teststring at %mw0 :array[0..3] of string(5);
end_var
给数组赋值
teststring[0] := "1234";
teststring[1] := "2345";
teststring[2] := "3456";
teststring[3] := "4567";
监视变量如下图
附件 2.jpg
以第一组创建的字符串为例,其字符个数为5个,
则该字符串自动占用5+1个字节地址(%mb0~%mb5).
字符串数组中的字符为"1234",共4个字符,则实际占用的字节数量为4+1=5(%mb0~%mb4),
而实际分配的字节数量为6个,因此,第六个字节(%mb5)被自动分配, (为什么呢?)
但是可以写入数据.而第4+1=5个字节(%mb4)无法写入数据,
teststring[0]: 占用的%mb0~%mb5;其中0~3里是字符数据,4强制为0 5 被占用.可写入数据,以此类推
teststring[1]:%mb6~%mb11
teststring[2]:%mb12~%mb17
teststring[3]:%mb18~%mb23

如果写入的字符数量超过变量定义的最大字符数,则后面的自动丢失.
如下图 赋值1234567 由于字符串定义的是5个字符.所以这个值只显示了"12345"
附件 1.jpg

之前好像看过一个文字说.如果在声明string变量的后面不标注的话.默认是占8个字节.找不到出处了
希望知道的朋友告诉一声




水平一般,能力有限.如有错误之处.欢迎并感谢指出.我一定认真学习积极改正.请勿DISS.
37234
cvlsam 版主
文章数:12401
年度积分:1586
历史总积分:37234
品牌积分(施耐德):222
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2019/11/11 15:00:03
#1楼
多占用的一个字节用于放置字符串结束符“/0”,也就是NULL。

Good Luck~
8132
0aguang0
文章数:1636
年度积分:255
历史总积分:8132
品牌积分(施耐德):2046
注册时间:2010/10/21
发站内信
发表于:2019/11/11 15:58:45
#2楼
回复 #1楼 cvlsam
这个案例里面写的...那个自动分配的地址是可以写入数据的...那是不是说写入的数据把这个终止符给覆盖了呢?
会有影响吗?
水平一般,能力有限.如有错误之处.欢迎并感谢指出.我一定认真学习积极改正.请勿DISS.

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

31.2002