标签: stdstring

VC++ 2010似乎只在固定数组中分配一个std :: string

这对我来说似乎很简单,但我实际上找不到任何明确说明这一点的麻烦.

是std::string stringArray[3] 不是会创建一个std::string对象数组SomeType typeArray[3]?实际数字无关紧要; 我随便挑了3个.

在Visual Studio 2010调试器中,它似乎创建单个字符串而不是字符串数组.为什么?

狂野猜测:它是调用默认std::string构造函数,然后调用未使用的索引3访问吗?如果是这样,为什么不在空字符串上引起越界异常呢?

这是否与重载[]运算符有关?

有很多方法可以编写相同的东西,而无需专门使用std::string没有问题的数组,但这种行为的解释/理由是什么?这对我来说似乎违反直觉.

编辑:我发现这个线程std :: string数组元素访问,其中答案的注释似乎观察到相同的行为.

c++ arrays stdstring visual-studio-2010 declare

1
推荐指数
1
解决办法
162
查看次数

将长度为0的字符串('0')传递给期望char*的STL函数

同事(严肃地说,我不使用char*:))制作了一个减少到这个的bug:

testVar.append('\0'); //testVar is std::string
Run Code Online (Sandbox Code Playgroud)

所以他基本上修复了它:

testVar.append("\0");
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么第一个不合法?不能认为它是0长度0终止字符串?我尝试进入VS10 std lib实现,亲眼看看,但我后悔了.:)

c++ stl stdstring

1
推荐指数
1
解决办法
113
查看次数

将第一个boost :: regex匹配放入一个字符串中

不知何故,我没有找到,如何只将第一次出现或正则表达式放入字符串.我可以创建一个正则表达式对象:

static const boost::regex e("<(From )?([A-Za-z0-9_]+)>(.*?)"); 
Run Code Online (Sandbox Code Playgroud)

现在,我需要匹配([A-Za-z0-9_]+)到std::string,说playername.

std::string chat_input("<Darker> Hello");
std::string playername = e.some_match_method(chat_input, 1);   //Get contents of the second (...)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?
什么应该代替some_match_method和应该采取什么参数?

c++ stdstring boost-regex

1
推荐指数
1
解决办法
2万
查看次数

在QML中使用std :: string

我有一个STL代码库需要在QtQuick 2.0应用程序(图形界面)和纯粹的STL应用程序(服务器)之间共享.接口可以从共享STL代码库派生其类,因此它可以具有Q_PROPERTYs,信号,槽等,但共享数据结构需要保持仅STL.

我想避免数据重复(std::string- > QString等)所以我试图std::string在Q_PROPERTY系统内直接使用.使用Q_DECLARE_METATYPE(std::string)和qRegisterMetaType<std::string>();声明属性,如:

Q_PROPERTY(QString stldata READ stldata WRITE setSTLData NOTIFY stldataChanged)
Run Code Online (Sandbox Code Playgroud)

使我的代码编译,但QML仍然不喜欢std::strings.

用以下内容编写文本字段:

Text
{
 text: myserviceinterface.stldata
}
Run Code Online (Sandbox Code Playgroud)

Unable to assign std::string to QString在附加现有QML字符串时会产生警告:

Text
{
 text: "text: " + myserviceinterface.stldata
}
Run Code Online (Sandbox Code Playgroud)

使Text控制显示变得怪异QVariant(std::string).

我究竟做错了什么?

c++ qstring qt stdstring qml

1
推荐指数
1
解决办法
1958
查看次数

如何从std :: string中取2个字符并在C++中将其转换为int?

在C++中,我有一个字符串,就是这样std::string string = "1234567890".

我有一个定义为的整数向量 std::vector<int> vec

我怎么能计算vec = stoi(string.at(1) + string.at(2))它会给我一个12我可以插入到这个向量的整数?

c++ string vector type-conversion stdstring

1
推荐指数
1
解决办法
168
查看次数

共享内存的std :: string给出了分段错误(linux)

我目前正在尝试在Linux上的2个进程之间的共享内存中放置结构.我没有问题共享bool或int但是当尝试共享字符串时,std :: string或char我有一个分段错误错误.

现在我的代码是:

#include <iostream>
#include <sys/types.h> //shmat
#include <sys/shm.h>
#include <sys/stat.h> //open
#include <fcntl.h>
#include <unistd.h> //close

using namespace std;

struct Prises{

int numero;
int transactionId;
bool reservation;
bool charge;
bool disponibilite;
bool defaut;
bool verrouillage;
bool trappe;
int LEDverte;
int LEDrouge;
std::string carte;
std::string etat;

};

int main()
{
const char *keyFile = "/tmp/key.dat";
/* Make sure the file exists. */
int descriptor = open(keyFile, O_CREAT | O_RDWR, S_IRWXU);

/* Only wanted to make sure that the …
Run Code Online (Sandbox Code Playgroud)

c++ linux stdstring shared-memory

1
推荐指数
1
解决办法
426
查看次数

std :: set of std :: string inequality implementation

既然std::set是作为二叉树实现的,它如何比较std::string不等式?看起来像a < b && b < a吗?

是直接使用字符串的长度还是以某种方式对其进行散列?它是否完全保证字符串的唯一性?

c++ stdstring stdset

1
推荐指数
1
解决办法
123
查看次数

用另一个字符序列替换C ++ std :: string中的字符/字符序列

我想,以取代所有出现&在我std::string与&amp;。这是代码段代码 链接

#include <algorithm>
#include <string>
#include <iostream>
int main()
{
    std::string st = "hello guys how are you & so good & that &";
    std::replace(st.begin(), st.end(), "&", "&amp;");
    std::cout << "str is" << st;
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

它显示了std :: replace无法替换字符串的错误,但仅适用于字符。 我知道我仍然有逻辑可以完成我的工作,但是有什么干净的C ++方式可以做到这一点吗?有内置功能吗?

c++ string replace stdstring c++11

1
推荐指数
1
解决办法
603
查看次数

将(临时?)std :: string传递给使用它来构造一个带有副本的对象的函数的最佳方法是什么?

请考虑以下代码:

struct Foo {
  std::string s;
  Foo(std::string s_) : s(s_) { }
};

Foo* f(std::string s)
{
  return new Foo(s);
}
Run Code Online (Sandbox Code Playgroud)

在那里f()可以用左值或右值调用std::string,或与char const*造成临时(但这是一样的右值我恢复).例如:

int main()
{
  f("test");
  f(std::string());
  std::string s("test");
  f(std::move(s));
  std::string s2("test");
  f(s2); // This MUST cause one copy.
}
Run Code Online (Sandbox Code Playgroud)

只有在最后一种情况下才需要一份副本.在所有其他情况下,我希望根本不会复制,并且std::string只构造一次(在分配中Foo).

这可能吗?如果是这样,签名会如何f()?

编辑:

使用Tracked from cwds我创建了一个小测试程序,其中有一个string类在构造,移动等时打印.对于main()函数,请看这个blob.

上面的程序给出了以下输出:

NOTICE  : Calling f("test")... <unfinished>
TRACKED :     string0*
TRACKED :     string1*(string0)
TRACKED :     string2*(string1) …
Run Code Online (Sandbox Code Playgroud)

c++ stdstring move-semantics c++17

1
推荐指数
1
解决办法
85
查看次数

从std :: string创建CString的C++失败

在我的基于MFC的应用程序中,此代码:

std::string stdString("MappingName");
std::cout << "as String: " << stdString << std::endl;
CString cString(stdString.c_str());
std::cout << "as CString: " << cString << std::endl;
Run Code Online (Sandbox Code Playgroud)

生成此输出:

as String: MappingName
as CString: 01DEA060
Run Code Online (Sandbox Code Playgroud)

CString每次运行它的值都不同,但长度似乎是不变的.其他一些结果是042219B0和042C4378.

我已经尝试了这个线程中讨论的每个变体,结果是一样的.我还试图将Visual Studio项目中的字符集从使用Unicode字符集更改为使用多字节字符集,同样没有任何效果.

转换失败的原因是什么?

编辑:更多的测试表明,它的价值std::string似乎没有区别:

tmp as String: The quick brown fox jumps over the lazy dog
tmp as CString: 00EAAF88
Run Code Online (Sandbox Code Playgroud)

我还将字符集设置为Not Set,这也没有帮助.

c++ mfc c-strings stdstring visual-studio

1
推荐指数
1
解决办法
319
查看次数