将C#字符串复制到现有预分配的`字符*`

将C#字符串复制到现有预分配的`字符*`,c#,string,unsafe,C#,String,Unsafe,我需要将C字符串复制到char*中。我有这个代码,它可以工作,但看起来很笨拙。有没有更优雅的方法 public unsafe static void GetReply(char* buffer) { string reply = "Hello, world"; // or whatever // clumsy code: var i = buffer; foreach (char x in reply.ToCharArray()) { *i = x; i++;

我需要将C字符串复制到
char*
中。我有这个代码,它可以工作,但看起来很笨拙。有没有更优雅的方法

public unsafe static void GetReply(char* buffer) {
  string reply = "Hello, world"; // or whatever
  // clumsy code:
  var i = buffer;
  foreach (char x in reply.ToCharArray()) {
    *i = x;
    i++;
  }
  *i = '\0';
}

注意:
缓冲区
保证指向已知长度的分配内存。没有问题。

您可以使用比循环更干净、速度更快的方法。

一个简单的方法可能是:

        for(int i = 0 ; i < reply.Length ; i++) {
            buffer[i] = reply[i];
        }
        buffer[reply.Length] =  '\0';
for(int i=0;i

您也可以使用
fixed(char*chars=reply){…}
并在指针上循环,但似乎有些过分。

您确定这是一个C#
char
(2字节)而不是一个C/C++
char
(1字节)吗?您用System.Buffer.BlockCopy()尝试过吗?@BenVoigt是的-我发布的代码很有效-我只是不喜欢它的外观:P@Alaudo这似乎只适用于
数组
s,而不适用于字符指针?