问题描述
代码如下:Byte[]szServerIP=newByte[128];stringa=System.Text.Encoding.UTF8.GetString(szServerIP);stringb=a.Trim()+"1111";Debug.Log(b);发现a的值为"";长度为128,b的值也为"";怎么让b的值为"1111";谢谢!
解决方案
本帖最后由 jxj31 于 2015-12-17 19:54:19 编辑
解决方案二:
用a.Trim('')
解决方案三:
Byte[]szServerIP=newByte[128];//定义一个长度为128的字符数组,每个元素初始值为空字符stringa=System.Text.Encoding.UTF8.GetString(szServerIP);//把字符数组转换成字符串,就是128个空字符串组成的字符串咯stringb=a.Trim()+"1111";//128个空字符串和字符串1111进行连接
b不会为空啊
解决方案四:
又是这个问题,C#字符串以结束,就是说碰到,认为是串的结尾问题不在于Byte[]szServerIP,而在于GetString(szServerIP)方法,因为没有初始化szServerIP,各个元素为空,于是每个元素对应的子串是:,整个a=……,128个输出a时,从左起,第一个就是,系统认为结束b=a.Trim()+"1111";就是……1111,输出b时,左端起,也是第一个碰到,结束验证测试Byte[]szServerIP=newByte[128];szServerIP[0]=(byte)'k';stringa=System.Text.Encoding.UTF8.GetString(szServerIP);则a,b都是k若改为szServerIP[127]=(byte)'k';a,b仍然什么都没有
解决方案五:
发现a的值为"";长度为128,b的值也为"";怎么让b的值为"1111";谢谢!b.Replace("","");
解决方案六:
Byte[]szServerIP=newByte[128];stringa=System.Text.Encoding.UTF8.GetString(szServerIP);---------------------------------------------------------------------------------------------------------------------------------最好还是先把这种东西打倒,保证不再有。
解决方案七:
很显然,对于分不清上述代码跟代码Byte[]szServerIP=newByte[128];varlen=0;stringa=System.Text.Encoding.UTF8.GetString(szServerIP,0,len);
的区别的人,我们要从“根”上去整治。因为我们根本不需要留着这样的程序啊。
解决方案八:
引用4楼From_TaiWan的回复:
发现a的值为"";长度为128,b的值也为"";怎么让b的值为"1111";谢谢!b.Replace("","");
不同编译环境,决定b的值。未必b都是空
解决方案九:
引用7楼lovelj2012的回复:
Quote: 引用4楼From_TaiWan的回复:
发现a的值为"";长度为128,b的值也为"";怎么让b的值为"1111";谢谢!b.Replace("","");不同编译环境,决定b的值。未必b都是空
详情?
解决方案十:
你的a从道理上来说他压根就不存在以为他是空字符所以他的值是..128个这个是没有意义的在C/C++中他直接就是空字符因为在程序中字符串是以作为一段字符串的结束的但是C#中由于string是一个对象他有Length属性所以他“不需要”之类的标志来区分一段字符串的结束你给他他也只能认栽了不能说你给个赋值""他的lenght还是0他的值将会是2不过是两个没有意义的空字符而已所以就是你上面描述的情况你什么都没看到长度却是128
解决方案十一:
引用8楼From_TaiWan的回复:
Quote: 引用7楼lovelj2012的回复:
Quote: 引用4楼From_TaiWan的回复:
发现a的值为"";长度为128,b的值也为"";怎么让b的值为"1111";谢谢!b.Replace("","");不同编译环境,决定b的值。未必b都是空
详情?
我在win732bitenterprise+visualstudio2010试了下b的输出是:128个空字符串+1111
解决方案十二:
引用10楼lovelj2012的回复:
Quote: 引用8楼From_TaiWan的回复:
Quote: 引用7楼lovelj2012的回复:
Quote: 引用4楼From_TaiWan的回复:
发现a的值为"";长度为128,b的值也为"";怎么让b的值为"1111";谢谢!b.Replace("","");不同编译环境,决定b的值。未必b都是空
详情?
我在win732bitenterprise+visualstudio2010试了下b的输出是:128个空字符串+1111
我的win7,32位,VS2008,空的
解决方案十三:
引用6楼sp1234的回复:
很显然,对于分不清上述代码跟代码Byte[]szServerIP=newByte[128];varlen=0;stringa=System.Text.Encoding.UTF8.GetString(szServerIP,0,len);的区别的人,我们要从“根”上去整治。因为我们根本不需要留着这样的程序啊。
P哥的意思好像是说按照实际数据长度分配空间。借本帖顺便问下:分配的128个存储空间没有初始化,假如在szServerIP[127]这个位置,以前的程序保存了200这个数(或者某个数据),而且程序结束时,没有free也没有析构(非托管程序),那么我们的程序会不会读出这个值?