将 String^ 转换为 const char* [与 c++]

发布于 2024-09-16 21:54:28 字数 343 浏览 5 评论 0原文

我有一个 String^1,我需要将其转换为 const char* 并且 c_str() 不起作用,因为它不是 System::String 的成员。除了 this< 之外,还有更简单的方法吗/a> 方法?我只执行一次,并且它来自 openFileDialog->Filename,因此输入不会很复杂。我使用的是 Visual Studio 2008。
谢谢

I have a String^1 and I need to convert it to const char* and c_str() does not work as it is not a member of System::String. Is there a simpler way to do this other than this method? I am only doing this once and it is from an openFileDialog->Filename, so the input will not be anything complex. I am using Visual Studio 2008.
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萌︼了一个春 2024-09-23 21:54:29

将 String^ 转换为普通 char* 字符串的最简单方法是仅使用您链接到的代码的一部分。重要的部分是:

pin_ptr<const wchar_t> wch = PtrToStringChars( source );

完成此操作后,您可以使用 wch 变量来访问您的角色,但是此代码有一些警告。

  • 如果您只是要使用 wch 变量来访问字符串,那么您必须确保字符串的生命周期小于声明 pin_ptr 的作用域的生命周期
  • 如果您想在其他地方使用该字符串,或者将其传递给某个寿命较长的函数,那么您将需要提取内容并将其保存在其他地方。这就是您链接到的示例中的大部分代码正在执行的操作。

我建议将该字符串保存在 STL 字符串(或 wstring)类中,或者至少将内容复制到单独管理的缓冲区中 - 就像示例所做的那样。

在工作中,我们使用一些重载函数来执行从一种字符串类型到另一种字符串类型的转换,所有函数都使用相同的名称。从 .Net 字符串转换为 STL 字符串的方法非常简单:

std::wstring ConvertString(String^ source)
{
    pin_ptr<const wchar_t> pinned_string_ptr(PtrToStringChars(source));
    return std::wstring(pinned_string_ptr);
}

The simplest way to convert a String^ to a plain char* string is to use just a bit of the code that you have linked to. The important part is:

pin_ptr<const wchar_t> wch = PtrToStringChars( source );

Once this is done you can use wch variable to access your characters, but there are a few warnings with this code.

  • If you are just going to use the wch variable to access the string then you must make sure that the lifetime of the string is less than the lifetime of the scope in which the pin_ptr is declared.
  • If you want to use the string elsewhere, or pass it to some longer lived function then you will need to extract out the contents and save that somewhere else. That is what most of the code in the example that you linked to is doing.

I would recommend saving that string in either a STL string (or wstring) class or at the very least copying the contents to a separately managed buffer - like the example is doing.

At work we use some overloaded functions which do conversions from one string type to another, all using the same name. The one that converts from a .Net string to a STL string is pretty much:

std::wstring ConvertString(String^ source)
{
    pin_ptr<const wchar_t> pinned_string_ptr(PtrToStringChars(source));
    return std::wstring(pinned_string_ptr);
}
意中人 2024-09-23 21:54:28

我认为这个页面可能对您有帮助。

希望有帮助

I think this page may help you.

Hope that helps

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文