相关疑难解决方法(0)

是否在C++ 11中写入&str [0] buffer(std:string)明确定义的行为?

char hello[] = "hello world";
std::string str;
str.resize(sizeof(hello)-1);
memcpy(&str[0], hello, sizeof(hello)-1);
Run Code Online (Sandbox Code Playgroud)

此代码是C++ 98中未定义的行为.它在C++ 11中是合法的吗?

c++ string buffer language-lawyer c++11

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

有没有办法在不修改缓冲区内容的情况下设置std :: string的长度?

根据这些问题的答案中的陈述

..在C++ 11中应该可以调用一个C API函数,它接受一个char指针来存储输出,如下所示:

str::string str;
str.reserve(SOME_MAX_VALUE);
some_C_API_func(&str[0]);
Run Code Online (Sandbox Code Playgroud)

但是现在有一种合法的方法可以将字符串的大小设置为缓冲区内(空终止的)内容的长度吗?像这样的东西:

str.set_size(strlen(&str[0]));
Run Code Online (Sandbox Code Playgroud)

这是一个非常不美观的滥用,std::string无论如何我听到你说,但我不能char在堆栈上创建一个临时缓冲区,所以我必须在堆中创建一个缓冲区并在之后销毁它(我想避免).

有一个很好的方法来做到这一点?也许不是保留,但事后调整和调用erase()会做到但是它感觉不好整洁..

char stdstring c++11

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

标签 统计

c++11 ×2

buffer ×1

c++ ×1

char ×1

language-lawyer ×1

stdstring ×1

string ×1