Скопируйте строку C # в существующий предварительно выделенный `char *` - PullRequest
0 голосов
/ 17 ноября 2011

Мне нужно скопировать строку 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 ]

5 голосов
/ 17 ноября 2011

Вы можете использовать Marshal.Copy, который чище и, вероятно, также быстрее, чем цикл.

2 голосов
/ 17 ноября 2011

Простой подход может быть:

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

Вы также можете использовать fixed(char* chars = reply) {...} и перебирать указатели, но кажется излишним.

...