我在C#中有以下功能。
public static string[] StringValue()
{
.....
return MyString;
}
我正在尝试使用
在C ++中调用该函数array<String^>^ MyString;
MyString = MyClass.StringValue();
for(int iter=0; iter < MyString->Length; iter++)
{
printf("%s", MyString[iter]);
}
MyString[iter]
的价值不合适。调试时在C#中是正确的。 MyString
的长度正在变得合适,但不是值。
答案 0 :(得分:2)
printf("%s", MyString[iter]);
这需要一个指向空终止数组char
的指针。并MyString[iter]
肯定不是那样。由于您有一个托管字符串,因此在C ++ / CLI程序集中,您可以像这样输出:
Console::WriteLine(MyString[iter]);
答案 1 :(得分:1)
print
是一个C函数,除非确实需要,否则在C ++ / CLI代码中是非常不合适的。
auto myStrings = MyClass::StringValues();
for each (auto s in myStrings) {
Console::WriteLine(s);
}
使用字符串非常困难,但.NET使其变得更容易。如果可以,请将它们保存在.NET中。否则,您将不得不处理不同的字符集,编码,数据结构,内存分配和所有权转移约定。
答案 2 :(得分:0)
而不是
printf("%s", MyString[iter]);
尝试使用
for ( int i = 0; i < MyString[iter].Length; i++ )
std::wcout << MyString[iter][i];
编辑:您可以使用
System::Console::WriteLine( MyString[iter] );