Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#现在填充字符串,希望它短一点_C#_String_Padding - Fatal编程技术网

c#现在填充字符串,希望它短一点

c#现在填充字符串,希望它短一点,c#,string,padding,C#,String,Padding,所以我有两个填充的字符串,但现在我想让它们显示出来,而Trim()似乎不想这样做 String devicename = "".PadRight(100); String deviceversion = "".PadRight(100); bool isDeviceReady = capGetDriverDescriptionA(i, ref devicename, 100, ref deviceversion, 100); 稍后我将使用如下所示的字符串: Messagebox.show(

所以我有两个填充的字符串,但现在我想让它们显示出来,而Trim()似乎不想这样做

String devicename = "".PadRight(100);

String deviceversion = "".PadRight(100);

bool isDeviceReady = capGetDriverDescriptionA(i, ref devicename, 100, ref deviceversion, 100);
稍后我将使用如下所示的字符串:

Messagebox.show("Device Name="+devicename.Trim()+" , Device Version="+deviceversion.Trim());
显示的所有内容都是“
设备名称=设备名称”


想法?

你为什么要填充字符串?看起来你只是在用空格填充字符串,这些空格稍后会被内容替换,但从你的问题来看,我不明白为什么有必要这样做。只是:

String devicename = "";
String deviceversion = "";

bool isDeviceReady = capGetDriverDescriptionA(i, ref devicename, 100, ref deviceversion, 100);

调用返回以零结尾字符串的API函数时,可以尝试使用
StringBuilder
而不是
string
。您得到的行为可能来自这样一个事实:API在字符串末尾写入零值(以终止它),而.NET将其视为包含零值的普通字符串


或者,查看,这建议使用
[marshallas(UnmanagedType.LPWSTR)]
属性对参数进行注释。然后PInovke机制应该自动处理最后的零值。

最后它非常简单。托马斯·佩特里克走上了正确的道路。返回的字符串是以null结尾(也称为以零结尾)的字符串。然后我只需要从字符串中删除空终止符

devicename = devicename.trim('\0');

@布莱恩。让我们知道您希望看到什么,以及您认为Trim将为您做些什么。坦白地说,我看不出您向我们展示的内容有任何意外。@Jim意外的是,消息框中没有显示“Device Version=…”——只有字符串的第一部分。原因是
devicename
字符串包含
null
值,因此MessageBox忽略了字符串的其余部分。@TomasPetricek,是的,关于“设备版本”不存在的说法是正确的。不得不说我错过了。至于包含空值的字符串,我不能这么说,但它似乎是合理的。我对PadRight vs.Trim的“问题”太纠结了也许OP认为字符串是可变的?从技术上来说,这不是答案,这是一个评论,但这次我没有投反对票,因为评论太长了,而且我同意你的观点。你对API调用做了假设,我遇到过很多这样的情况,您可以为API提供一个缓冲区来填充。这个答案和评论都是离题的。我本来会把它放在评论里的,但我只是缺少能够做到这一点的声誉:我猜这是有道理的。但是StringBuilder似乎不起作用。在循环中使用它时,我需要将字符串重置为原始的“devicename=”“.PadRight(100);”API不喜欢它被修剪。