上面的程序是可以的啊,在我这里完全通过了。
可以是你输出的问题。
下面是我测试的程序:
char[]  c=new  char[5]; 
c[0]='3'; 
string  s=""; 
string  tmp=new  string(c); 
for(int  i=1;i<5;i++) 
    { 
s+=tmp; 
Console.WriteLine(s);
     } 

Console.ReadLine();

解决方案 »

  1.   

    关键问题出在tmp的实列化上
    string tmp = new string(c);
    由于在C#中初始化字符数组时没有付值的元素将自动为'\0'
    于是,tmp的内容变为 "3\0\0\0\0"
    并且,由于实列化为由指向5位有字符数组(c)的指针指示的值,所以tmp中'3'后面的4个'\0'不能被自动忽略!
    而循环后s的内容变为"3\0\0\0\03\0\0\0\03\0\0\0\03\0\0\0\0"
    当然显示为 3。又如:
    string s;
    s = "3";
    s += '\0';
    s += "3";
    此时s显示为"3"。你可以使用string的另一个构造函数:
    public String(char*, int, int);
    将tmp的初始化改为string tmp = new string(c, 0, 1); //只取第一个元素
      

  2.   

    to Yang_Wenli:
    你编译试过了吗?开始我也是这样想的,可是他那个程序在我这里通过了。你说改成string tmp = new string(c, 0, 1)里面的c是字串类型啊,这是从串取字符函数。我也知道啊。
      

  3.   

    你的程序问题出在你在循环里显示sfor(int i=1;i<5;i++) 

    s+=tmp; 
    Console.WriteLine(s); // 这一句有问题
    } 变成了累积显示 s 的值,每次s的值都是"3"循环以后当然是"3333"你可以这样式式
    把Console.WriteLine(s); 移到循环外:
    for(int i=1;i<5;i++) 

    s+=tmp; 
    }
    Console.WriteLine(s); // 移到循环外
      

  4.   

    To Yang_Wenli(Yang_Wenli):
    Console.WriteLine(s)是打印行啊,所以不会重叠显示的,在循内时,我编译运行结果是:3 
                3 3
                3 3 3
                3 3 3 3
    如果把它移到循环外,则只显示:3 3 3 3
    我用的是5张碟的Enterprise Archtect英文版,你运行的结果真的不是这样吗?
      

  5.   

    谢谢Yang_Wenli(Yang_Wenli),结帖!