是否有相当于LPTSTR的字符串?我知道字符串和wstring.有没有tstring?
我在C++中有一个char数组,它像{'a','b','c',0,0,0,0}
现在我把它改成一个流,我希望它看起来像"abc",其中有四个空格,我主要使用std :: stiring,我也有提升.我怎么能用C++做到这一点
基本上我认为我正在寻找类似的东西
char hellishCString[7] = {'a','b','c',0,0,0,0}; // comes from some wired struct actually...
std::string newString(hellishCString, sizeof(hellishCString));
newString.Replace(0,' '); // not real C++
ar << newString;
Run Code Online (Sandbox Code Playgroud) 我在这行中遇到编译错误:
cout << (MenuItems[i].Checkbox ? (MenuItems[i].Value ? txt::mn_yes : txt::mn_no) : MenuItems[i].Value)
Run Code Online (Sandbox Code Playgroud)
错误:
menu.cpp|68|error: invalid conversion from 'int' to 'const char*'
menu.cpp|68|error: initializing argument 1 of 'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'
Run Code Online (Sandbox Code Playgroud)
MenuItems是以下类的std :: vector:
class CMenuItem
{
public:
string Name;
int Value;
int MinValue, MaxValue;
bool Checkbox;
CMenuItem (string, int, int, int);
CMenuItem (string, bool);
};
Run Code Online (Sandbox Code Playgroud)
mn_yes和mn_no是std :: strings.
编译器是MinGW(与代码:: blocks一起分发的版本).
我刚刚从char数组转移到std :: string而且我已经遇到了一个问题,我可能正在做一些非常愚蠢的事情,随意嘲笑:
int main()
{
string * p = new string;
memset(p, 0, sizeof(string));
expected_exepath(p);
cout << p->data;
delete p;
}
Run Code Online (Sandbox Code Playgroud)
错误在p-> data中,它表示"绑定到函数的指针只能用于调用函数".p是std :: string,所以我不明白为什么它认为我正在尝试叫一个功能.
我不认为有人告诉我在使用std :: string和C++中的字符串数据类型之间的区别是什么?
在什么情况下应该在标准字符串上使用std :: string?
谢谢.
我正在使用此代码将unsigned char*(指向256个值的数组)转换为std :: string:
int ClassA::Func(unsigned char *dataToSend, int sendLength)
{
std::stringstream convertStream;
std::string dataToSendStr = "";
for(int i=0; i<=sendLength; i++) convertStream << dataToSend[i];
while(!convertStream.eof()) convertStream >> dataToSendStr;
...
}
Run Code Online (Sandbox Code Playgroud)
但后来我有这种格式的dataToSendStr:
dataToSendStr ""
[0] 0x00
[1] 0x00
[2] 0x04
[3] 0xC0
Run Code Online (Sandbox Code Playgroud)
如果我现在使用这个值我只得到""而不是重要值[0-3]!
- >需要类似:dataToSendStr"000004C0"
谢谢你的帮助!
在以下代码中:
#include <string>
using namespace std;
int main(){
char command[300];
string stringz = "mystringy";
sprintf(command,"echo \"something with a string %s\" ", stringz);
system(command);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么是输出
something with a string 8?
Run Code Online (Sandbox Code Playgroud)
而不是预期的
something with a string mystringy
Run Code Online (Sandbox Code Playgroud)
一个愚蠢的问题,但我无法找到答案.
我正在阅读为什么复制构造函数有多个参数?.
接受的答案说:
旧std::basic_string的确有一个:
basic_string(const basic_string& s,
size_type pos = 0, size_type n = npos)
Run Code Online (Sandbox Code Playgroud)
但是http://www.cplusplus.com/reference/string/basic_string/basic_string/说:
basic_string (const basic_string& str, size_type pos, size_type len = npos,
const allocator_type& alloc = allocator_type());
Run Code Online (Sandbox Code Playgroud)
上面不是复制构造函数,而是子串构造函数,它复制str从字符位置开始pos并跨越len字符的部分.
C++标准部分说:
如果X类的第一个参数是X&,const X&,volatile X&或const volatile X&,并且没有其他参数或者所有其他参数都有默认参数,则X类的非模板构造函数是一个复制构造函数
那么,该链接的接受答案是否不正确?这是子串的真正basic_string类构造函数吗?我已经在链接上检查了C++ 98,C++ 11和C++ 14规范中的原型并显示了相同的内容.
使用CString.Format(),我传给它一个std::map返回std::string给定的时候int.
所以:
CString cStr;
cStr.Format("%s", IntToStdStringMap[1]);
Run Code Online (Sandbox Code Playgroud)
其中,IntToStdStringMap[1]返回一些字符串,我们会说"你好,世界!".问题是每次都不会崩溃.最终,我将收到访问冲突.
为什么会这样?
请记住,将代码更改为以下内容:
CString cStr;
cStr.Format("%s", IntToStdStringMap[1].c_str());
Run Code Online (Sandbox Code Playgroud)
缓解了这个问题.
有任何想法吗?
我想使用std::string(size_type count,CharT ch)具有较大价值的count。阅读https://en.cppreference.com/w/cpp/string/basic_string/basic_string,如果此构造函数失败,我将找不到异常定义。
如果它是正确的,尽管noexcept构造函数中没有子句,如何确定该字符串已创建?我应该检查它的大小是否不为0?