char指向char数组的指针

时间:2014-06-13 10:26:22

标签: arrays c++-cli

所以我有这个方法返回一个char指针:

Private: char* currentSelectedDevice()
         {
            String^ comboboxText = counterComboBox->Text;
            marshal_context ^ context = gcnew marshal_context();
            char* temp;
            cont char* convertedString = context->marshal_as<const char*>(comboboxText);
            temp = const_cast<char *>(convertedString);
            char* oneCounterPort = strtok (temp, " =");
            return oneCounterPort;
         }

我想要实现的是将此方法复制到char数组中。我正在考虑使用for循环,但这并不是我想要的。那我怎么能这样做呢?

我在想这样的事情可能有用:

char temp[sizeof(currentSelectedDevice())] = currentSelectedDevice(); 

1 个答案:

答案 0 :(得分:1)

您可以使用Marshal::Copy。你的functoin看起来像这样:

#include <stdlib.h> // In case you use C (for malloc() access)

// C++/CLI function
char * currentSelectedDevice()
{
    String^ comboBoxText = counterComboBox->Text;

    // Allocate unmanaged memory:
    char *result = (char*)malloc(comboBoxText->Length);

    // Copy comboBoxText to result:
    Marshal::Copy( comboBoxText ->ToCharArray(), 0, IntPtr( (char*) result ), comboBoxText->Length );

    return result;
}

它将comboBoxText的内容(注释此处ToCharArray()的来电)从位置0复制到comboBoxText.Lengthresult }。

然后调用C函数将是可以像这样使用它:

// Calling C function
void read_combo_box_text()
{
  // Get text:
  char * cbxText = currentSelectedDevice();

  // .. Do something with it

  // Free (if don't needed anymore)
  free(cbxText);
}

希望这有帮助。

注意:如果您为C++执行此操作,请不要包含stdlib.h并将malloc()替换为new和{{1} } free()