如何将std::stringa 转换为a char*或a const char*?
我想转换string为char数组但不是char*.我知道如何将字符串转换为char*(通过使用malloc或我在代码中发布它的方式) - 但这不是我想要的.我只是想转换string为char[size]数组.可能吗?
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
int main()
{
// char to string
char tab[4];
tab[0] = 'c';
tab[1] = 'a';
tab[2] = 't';
tab[3] = '\0';
string tmp(tab);
cout << tmp << "\n";
// string to char* - but thats not what I want
char *c = const_cast<char*>(tmp.c_str());
cout << c << "\n";
//string to char
char tab2[1024];
// …Run Code Online (Sandbox Code Playgroud) 电话:博士
我怎么可以连接
const char*带std::string,整齐而优雅,没有多个函数调用。理想情况下,在一个函数调用中,输出为const char*. 这是不可能的,什么是最佳解决方案?
到目前为止,我在 C++ 中遇到的最大障碍是它如何处理字符串。在我看来,在所有广泛使用的语言中,它处理字符串的能力最差。我见过其他与此类似的问题,这些问题的答案要么是“使用std::string”,要么只是指出其中一个选项最适合您的情况。
然而,当尝试像在其他语言中那样动态地使用字符串时,这是无用的建议。我不能保证总是能够使用,std::string并且在我必须使用的时候,const char*我碰到了“它是恒定的,你不能连接它”的明显墙。
我在 C++ 中看到的任何字符串操作问题的每个解决方案都需要重复的多行代码,这些代码仅适用于该字符串格式。我希望能够将任何字符集与+符号连接起来,或者像format()在 C# 或 Python 中一样使用一个简单的函数。为什么没有简单的选择?
标准输出
我正在编写一个 DLL,到目前为止我已经cout通过<<操作符输出了文本。到目前为止,使用以下形式的简单字符数组一切正常:
cout << "Hello world!"
Run Code Online (Sandbox Code Playgroud)
运行时字符串
现在到了我想在运行时构造一个字符串并将其与一个类一起存储的点,这个类将保存一个报告一些错误的字符串,以便其他类可以获取它们并可能cout稍后发送给字符串将由函数设置SetReport(const char* report)。所以我真的不想为此使用多于一行,所以我继续写一些类似的东西:
SetReport("Failure in " + __FUNCTION__ + ": foobar was " + foobar + "\n"); // __FUNCTION__ gets the name of the current function, foobar is some …Run Code Online (Sandbox Code Playgroud) 我要求用户在控制台上输入一个字符串.但我不知道字符串的长度.
如何定义一个结构以适应具有可变长度的输入?
int main(){
int i;
char s[10];
cout << "input string:";
cin >> s;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果输入字符串长度超过10,示例代码将导致堆损坏.
我尝试了使用代码中的 URL 启动 Microsoft Edge和如何从命令行在 Microsoft Edge 中打开 URL 中的解决方案?但它们对我不起作用。
这是我的代码:
std::string url = "http://www.test.com";
std::wstring quotedArg = L"microsoft-edge:\"" + url + L"\"";
std::vector<WCHAR> argBuff(quotedArg.w_size() + 1);
wcscpy_s(&argBuff[0], argBuff.size(), quotedArg.w_str());
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
si.cb = sizeof si;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
if (!CreateProcess(L"start", &argBuff[0], NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi)) {
DWORD error = GetLastError(); // here error = 2
return false;
}
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread); …Run Code Online (Sandbox Code Playgroud) BOOL WINAPI WriteFile(
_In_ HANDLE hFile,
_In_ LPCVOID lpBuffer,
_In_ DWORD nNumberOfBytesToWrite,
_Out_opt_ LPDWORD lpNumberOfBytesWritten,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);
Run Code Online (Sandbox Code Playgroud)
WriteFile采用const void*.如何将std :: string转换为const void*,以便将字符串的内容写入磁盘?
我有一个函数string_to_char(),它试图给我一个字符串形式,我可以将它传递到我正在使用的库中,它想要char *(但我认为与 一起使用const char *,所以我一直在尝试两者)。
我编写的用于测试我的实现的代码string_to_char()如下:
#include <iostream>
const std::string endl = "\n";
char * string_to_char(std::string str)
{
return (char*) str.c_str();
}
int main()
{
std::string test1 = "Some test strin";
std::string test2 = "Some test string";
char * result1 = string_to_char(test1);
char * result2 = string_to_char(test2);
std::cout << "part1" << endl;
std::cout << result1 << endl;
std::cout << string_to_char(test1) << endl;
std::cout << "part2" << endl;
std::cout << result2 << endl; …Run Code Online (Sandbox Code Playgroud) 我需要将字符串传递给socket send()函数,该函数只接受char*.所以我在这里尝试转换它:
void myFunc(std::string str) //Taking string here const is good idea? I saw it on some examples on web
{
char *buf = str.c_str; //taking buf const is good idea?
std::cout << str;
}
int main()
{
const std::string str = "hello world";
myFunc(str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出错误:
test.cpp:6:18: error: cannot convert ‘std::basic_string<_CharT, _Traits, _Alloc>::c_str<char, std::char_traits<char>, std::allocator<char> >’ from type ‘const char* (std::basic_string<char>::)()const’ to type ‘char*’
Run Code Online (Sandbox Code Playgroud)