dim s as string = String.Empty.PadRight(260)actually it is meaningless to fix a width for a string in .NET, consider to use dim clist(259) as char
string[] s =new string[260];
string[] s =new string[260];
string[] s =new string[260];
同意saucer(思归, MS .NET MVP) ( ) string str=string.Empty.PadRight(260);
可惜都不行啊 To 思归先生 我想得到的是C#的东西啊 To 浪子等 我不需要数组 To 北方的天空 我是在struct中定义的,你的方法不行,况且你的方法只对char c有效,对整体string无效痛苦中... 不然还是不学C#了 控件不好用,API也引用不了(只因为string大小不定) 还是转行吧
To 思归先生 我是在struct中定义的,你的方法不行
我想我应该在这里作一下总结:) 我不是赞同saucer的用定长初始化串的程序做法,而是严重同意他的说法:)确实,给.NET中的一个string类型的变量固定宽度是没有意义的。你固定的只是初始化串的长度,你依然可以通过给这个串重新赋值(任意长度的串)来改变你定义的串的长度: 比如: string ssa = string.Empty.PadRight(20); MessageBox.Show(ssa);//20个空格 MessageBox.Show(ssa.Length.ToString());//20 ssa = "123456789012345678901";//21个字符的串 MessageBox.Show(ssa);//正确,显示上面的串 MessageBox.Show(ssa.Length.ToString());//21string ss1 = new string('A',18);//18 MessageBox.Show(ss1); ss1 = "1234567890123456789";//19 MessageBox.Show(ss1); MessageBox.Show(ss1.Length.ToString());因此,我们只能说用固定长度初始化一个字符串的做法存在以下几种: 1、String s = new String(char c, int count) //ju_feng(NorthSky) 2、string ssa = string.Empty.PadRight(20); //saucer 3、string ssa = " "//x个空格的串 :)确实没有意义而至于 string[] s =new string[260];,只是定义了一个数组,每个数组的元素都是string类型,贴在这里大概是象告诉搂主如何使用数组吧因此,如果搂主一定要使用定长的串的话,还是saucer的建议,用字符数组吧:) char[] sss = new char[260]; 完毕,请大家指教:)
string[] s =new string[260];这个是不行的,只是申明了260个string 把一个string 指定长度有什么意义吗? 如果是这样,还不如用char[]
首先,一些API的接口是需要固定string长度,所以我提出了这个问题。 其次初始化string才是没有意义的(如果你了解内存定义的话)。 我的例证如下: string aaa; len后得知aaa长度为0 char[260];循环相加后 len aaa长度为260 但是len 整体struct时,结果却令人大跌眼镜,虽然aaa长度为260,但包含aaa的struct长度仍为0 在vb中可以有如下声明:dim aaa as string * 260,它的作用就是规定了aaa的长度为定长,且等于260,所以使我产生了对c#的疑问 尽管大家都很努力,我的方案仍无法实现
dim clist(259) as char
string str=string.Empty.PadRight(260);
To 思归先生 我想得到的是C#的东西啊
To 浪子等 我不需要数组
To 北方的天空 我是在struct中定义的,你的方法不行,况且你的方法只对char c有效,对整体string无效痛苦中...
不然还是不学C#了
控件不好用,API也引用不了(只因为string大小不定)
还是转行吧
我不是赞同saucer的用定长初始化串的程序做法,而是严重同意他的说法:)确实,给.NET中的一个string类型的变量固定宽度是没有意义的。你固定的只是初始化串的长度,你依然可以通过给这个串重新赋值(任意长度的串)来改变你定义的串的长度:
比如:
string ssa = string.Empty.PadRight(20);
MessageBox.Show(ssa);//20个空格
MessageBox.Show(ssa.Length.ToString());//20
ssa = "123456789012345678901";//21个字符的串
MessageBox.Show(ssa);//正确,显示上面的串
MessageBox.Show(ssa.Length.ToString());//21string ss1 = new string('A',18);//18
MessageBox.Show(ss1);
ss1 = "1234567890123456789";//19
MessageBox.Show(ss1);
MessageBox.Show(ss1.Length.ToString());因此,我们只能说用固定长度初始化一个字符串的做法存在以下几种:
1、String s = new String(char c, int count) //ju_feng(NorthSky)
2、string ssa = string.Empty.PadRight(20); //saucer
3、string ssa = " "//x个空格的串 :)确实没有意义而至于 string[] s =new string[260];,只是定义了一个数组,每个数组的元素都是string类型,贴在这里大概是象告诉搂主如何使用数组吧因此,如果搂主一定要使用定长的串的话,还是saucer的建议,用字符数组吧:)
char[] sss = new char[260]; 完毕,请大家指教:)
把一个string 指定长度有什么意义吗?
如果是这样,还不如用char[]
其次初始化string才是没有意义的(如果你了解内存定义的话)。
我的例证如下:
string aaa; len后得知aaa长度为0
char[260];循环相加后 len aaa长度为260
但是len 整体struct时,结果却令人大跌眼镜,虽然aaa长度为260,但包含aaa的struct长度仍为0
在vb中可以有如下声明:dim aaa as string * 260,它的作用就是规定了aaa的长度为定长,且等于260,所以使我产生了对c#的疑问
尽管大家都很努力,我的方案仍无法实现
如果定义了一个String对象,改变其长度则会生成一个全新的String对象,所以要使用变长的字符串应该使用StringBuilder.
struct StringInfoW {
[MarshalAs(UnmanagedType.LPWStr)] public String f1;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)] public String f2;
[MarshalAs(UnmanagedType.BStr)] public String f3;
}
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)] public string szExeFile;