96

主题

59

回帖

1188

积分

精英创作者

积分
1188

夏日·活跃之王勋章

QQ
发表于  2023-7-12 18:56:48 | 显示全部楼层 |阅读模式 550 0
本帖最后由 leisel#1625 于 2023-7-12 19:04 编辑

理论上局部变量字符串应该默认是空字符串,引擎里的空字符串不是严格意义上的空字符串,在某些情况下并不生效并导致错误

比如A函数返回字符串类型,返回要么是空字符串,要么是满足条件后赋值的字符串

但是B函数调用A函数获取返回值的时候,如果A函数没有满足条件完成赋值,并不会返回“”这种格式的空字符串,而是某种程序上没有初始化的错误(并不报错),而导致B函数出现某种错误(并不报错)
错误表现为,B函数用变量接到的A返回值并不是一个空字符串,而是该动作失效,导致B函数根本没执行该赋值动作,因此B函数本来应该是空值却因为没有执行赋值动作,被停留在前值状态,而出现错误混乱

在很多语言里,基本变量通常都要初始化,例如real默认为0,int默认为0,string默认为“”,这里string只有在某种情况下为“”,在某些复杂场合,并不为“”,比如上述说道的情况

通过测试,在A函数第一行给局部字符串变量赋值“”,可以解决问题,因此猜测string变量根本没有初始化,但所使用过的多种比较流行的语言,均不存在这种情况,也很容易导致很多不了解该问题的作者难以排查问题,或增加没必要的DEBUG成本
逆袭研究院:810363663,y3公益,义务互助,分享地图技术、创作思维、市场分析,帮助别人就是帮助自己