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

时间:2011-11-17 14:57:05

标签: 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++;
  }
  *i = '\0';
}

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

2 个答案:

答案 0 :(得分:5)

您可以使用Marshal.Copy,它更清晰,也可能比循环更快。

答案 1 :(得分:2)

一种简单的方法可能是:

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

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