Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在以字符串形式存储输出的WinAPI函数中将字符串转换为LPSTR_String_Winapi_Visual C++ - Fatal编程技术网

String 如何在以字符串形式存储输出的WinAPI函数中将字符串转换为LPSTR

String 如何在以字符串形式存储输出的WinAPI函数中将字符串转换为LPSTR,string,winapi,visual-c++,String,Winapi,Visual C++,我试图将一些内容存储到字符串变量中,方法是将其作为参数传递给各种类型的Windows API函数,这些函数接受诸如char*之类的变量 例如,我的代码是:- std::string myString; GetCurrentDirectoryA( MAX_PATH, myString ); 现在,在这种情况下,如何将字符串变量转换为LPSTR 请看,此函数的作用不是将字符串的内容作为输入传递,而是在执行后将一些内容存储到字符串变量中。因此,myString.c_str被排除在外 编辑:我有一个解

我试图将一些内容存储到字符串变量中,方法是将其作为参数传递给各种类型的Windows API函数,这些函数接受诸如char*之类的变量

例如,我的代码是:-

std::string myString;
GetCurrentDirectoryA( MAX_PATH, myString );
现在,在这种情况下,如何将字符串变量转换为LPSTR

请看,此函数的作用不是将字符串的内容作为输入传递,而是在执行后将一些内容存储到字符串变量中。因此,myString.c_str被排除在外

编辑:我有一个解决方案,删除字符串的概念,并用类似

char myString[ MAX_PATH ];
但这不是我的目标。我想利用字符串。有可能吗

也像铸造一样

GetCurrentDirectoryA( MAX_PATH, ( LPSTR ) myString );
它不起作用


提前感谢您的帮助。

通常,我会将数据读入TCHAR,然后将其复制到std::string中。这是最简单的方法

通常,我会将数据读入TCHAR,然后将其复制到std::string中。这是最简单的方法

LPTSTR被定义为TCHAR*,因此实际上它只是一个普通的C字符串,但这取决于代码中使用的是ASCII还是Unicode。我也是

LPTSTR lpStr = new TCHAR[256];
ZeroMemory(lpStr, 256);
//fill the string using i.e. _tcscpy
const char* cpy = myString.c_str();
_tcscpy (lpStr, cpy);
//use lpStr
有关_tcscpy和thread的参考,请参阅。

LPTSTR定义为TCHAR*,因此实际上它只是一个普通的C字符串,但这取决于代码中使用的是ASCII还是Unicode。我也是

LPTSTR lpStr = new TCHAR[256];
ZeroMemory(lpStr, 256);
//fill the string using i.e. _tcscpy
const char* cpy = myString.c_str();
_tcscpy (lpStr, cpy);
//use lpStr

有关_tcscpy和thread的参考,请参阅。

通常,人们会重写Windows函数,以使其对std::string友好,如下所示:

std::string GetCurrentDirectoryA()
{
  char buffer[MAX_PATH];
  GetCurrentDirectoryA( MAX_PATH, buffer );
  return std::string(buffer);
}
或者,对于广泛的字符支持:

std::wstring GetCurrentDirectoryW()
{
  wchar_t buffer[MAX_PATH];
  GetCurrentDirectoryW( MAX_PATH, buffer );
  return std::wstring(buffer);
}

通常,人们重写Windows函数时需要对std::string友好,如下所示:

std::string GetCurrentDirectoryA()
{
  char buffer[MAX_PATH];
  GetCurrentDirectoryA( MAX_PATH, buffer );
  return std::string(buffer);
}
或者,对于广泛的字符支持:

std::wstring GetCurrentDirectoryW()
{
  wchar_t buffer[MAX_PATH];
  GetCurrentDirectoryW( MAX_PATH, buffer );
  return std::wstring(buffer);
}

嗨,你是说c_街还是有点像c_星。我无法搜索它。此外,我使用的是ASCII码。那么,根据我编辑的问题,我给出的变通解决方案更好,还是您建议我使用您提出的解决方案。请你给我对比一下这两种方法。这是我的平板电脑的自动更正!我是说当然了!我使用通用的方法,这是很常见的。为了保持通用性,我的方法更好。如果你对你的方法很满意,那么就使用它,因为它提供了一种更简单但非通用的方法。嗨,你是指.c_str还是有类似.c_star的东西。我无法搜索它。此外,我使用的是ASCII码。那么,根据我编辑的问题,我给出的变通解决方案更好,还是您建议我使用您提出的解决方案。请你给我对比一下这两种方法。这是我的平板电脑的自动更正!我是说当然了!我使用通用的方法,这是很常见的。为了保持通用性,我的方法更好。如果您对您的方法很满意,那么就使用它,因为它提供了一种更简单但非通用的方法。