日期:2014-05-18  浏览次数:20861 次

这个字符串怎么操作?
我调用API函数获取当前的系统用户名,得到了一个string类型的字符串,可是后面却跟了一串多余的 "0\0\0\0\0\0\0\ ",我以为是空格,可是用string.Trim()方法怎么也删不掉,请问我得到的是字符串吗?如果是为什么不能删除后面的东西呢?下面是我的代码


API函数调用定义:
        [DllImport( "Advapi32.dll ",   EntryPoint   =   "GetUserName ",   ExactSpelling   =   false,   SetLastError   =   true)]
        static   extern   bool   GetUserName([MarshalAs(UnmanagedType.LPArray)]   byte[]   lpBuffer,   [MarshalAs(UnmanagedType.LPArray)]   Int32[]   nSize);

这是函数调用:
                byte[]   str   =   new   byte[20];
                Int32[]   len   =   new   Int32[1];
                len[0]   =   20;
                GetUserName(str,   len);
                string   username   =   System.Text.Encoding.ASCII.GetString(str).Trim();
调试的时候   username显示的值为 "chen.zh\0\0\0\0\0\0\0\0\0\0\0\0\0 "
请问是只怎么回事啊,我厂只要前面的chen.zh就好.

------解决方案--------------------
[DllImport( "advapi32.dll ")]
public static extern bool GetUserName(StringBuilder lpBuffer, ref int nSize);

private void button1_Click(object sender, EventArgs e)
{
StringBuilder vBuffer = new StringBuilder(256);
int vSize = vBuffer.Capacity;
GetUserName(vBuffer, ref vSize);
Text = vBuffer.ToString();
//Text = Environment.UserName; //推荐用.NET的方法
}