当前位置:编程学习 > C#/ASP.NET >>

请教stringbuilder如何直接转到char[],谢谢

不通过ToString().ToCharArray();因为我的程序只要用到string就会无故退出,现在考虑改用char试下 --------------------编程问答--------------------


StringBuilder sb = new StringBuilder ( "Hello World" );
            char[] toChar = new char[sb.Length];
            for (int i = 0; i < sb.Length;i++ )
            {
                toChar[i] = sb[i];
            }



新学习的,还没学到SB的内容,不过查了下MSDN,好像和STRING差不多,应该可行。 --------------------编程问答-------------------- 你用byte[]获取返回值吧 --------------------编程问答-------------------- 因为我的程序只要用到string就会无故退出

那你应该检查一下你用到string的那段代码,没有无缘无故的退出的 --------------------编程问答-------------------- 贴出代码 
怎么使用的 --------------------编程问答--------------------
引用 1 楼 bh_pirate 的回复:
C# code

StringBuilder sb=new StringBuilder ("Hello World" );char[] toChar=newchar[sb.Length];for (int i=0; i< sb.Length;i++ )
            {
                toChar[i]= sb[i];
            }

 新学习的,还没学到SB的内容,不过查了下MSDN,好像和STRING差不多,应该可行。

char[] toChar=newchar[sb.Length];
sb.length + 1~ --------------------编程问答-------------------- 贴出你的DLL原型函数来,核对封送时选用的数据类型是否正确。 --------------------编程问答-------------------- 代码:

原形:
[DllImport("Test.dll")]
public static extern int gettext(StringBuilder s);

调用:

StringBuilder s = new StringBuilder(1024 * 8);


string text="";
for (int k = 0; k < 5500; k++)
            {
                gettext(s);                

                text = s.ToString() + text;

                ...
                Thread.Sleep(55);
            }

当循环进行到一定数值,出现System.ExecutionEngineException、编译器直接崩溃之类的情况都出现过,很不稳定,奇怪的是如果不用F5调试,直接走exe却可用,所以怀疑是否是string的问题 --------------------编程问答-------------------- [DllImport("Test.dll")] 
public static extern int gettext(StringBuilder s); 

Test.dll 是用什么语言(如VC,C++等)写的。 它在开发语中的函数原型是什么? --------------------编程问答--------------------

[DllImport("Test.dll")]
public static extern int gettext(StringBuilder s);

//调用:

StringBuilder s = null ; 


string text="";
for (int k = 0; k < 5500; k++)
            {
                s = new StringBuilder(1024 * 8);
                gettext(s);               
                text = s.ToString() + text;

                ...
                Thread.Sleep(55);
            }


 s = new StringBuilder(1024 * 8);
放置到循环中,因为gettext(s)会改变s的长度的,会引发不预期的错误
比如上一次循环 s长度为1000,而此次gettext(s)需要申请超过1000的长度就会引发不预期的错误
之前调用WIN32 API的时候碰到过,个人所见,楼主可以尝试看看.
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,