相关疑难解决方法(0)

std :: string是否包含null终止符?

下面的字符串是否包含空终止符'\ 0'?

std::string temp = "hello whats up";
Run Code Online (Sandbox Code Playgroud)

谢谢!:)

c++ string null

66
推荐指数
3
解决办法
6万
查看次数

在C++ 11中,std :: string总是以null结尾吗?

在他的网站2008年的一篇文章中,Herb Sutter声明如下:

由于与并发相关的原因,有一个积极的建议是在C++ 0x中进一步加强这一点并且需要空终止并且可能禁止写时复制实现.以下是该文件:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html.我认为本文中的一个或两个提案很可能会被采纳,但我们将在下一个或两个会议上看到.

我知道C++ 11现在保证std :: string内容连续存储,但他们是否在最终草案中采用了上述内容?

现在使用类似的东西会安全&str[0]吗?

c++ string null-terminated language-lawyer c++11

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

以长度为前缀的字符串克服的零终止字符串有什么问题?

以长度为前缀的字符串克服的零终止字符串有什么问题?

我正在读这本书写的Great Code vol.1我想到了这个问题.

c c++ string

37
推荐指数
5
解决办法
3082
查看次数

有没有办法获得std:string的缓冲区

有没有办法获得"原始"缓冲区oa std :: string?
我在想类似的东西CString::GetBuffer().例如,使用CString我会这样做:

CString myPath;  
::GetCurrentDirectory(MAX_PATH+1, myPath.GetBuffer(MAX_PATH));  
myPath.ReleaseBuffer();  
Run Code Online (Sandbox Code Playgroud)

那么,std :: string有类似的东西吗?

c++ winapi stl stdstring

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

在矢量:: push_back内存明智的情况下会发生什么?

我的问题是关于它的效果vector::push_back,我知道它在向量的末尾添加了一个元素但是在引擎盖下面会发生什么?

IIRC内存对象是按顺序方式分配的,所以我的问题是是否vector::push_back只是在向量之后立即分配更多内存,如果是这样,如果该位置没有足够的可用内存会发生什么?或者也许在"结束"中添加指针以使向量"跳"到它继续的位置?或者只是通过将其复制到另一个有足够空间且旧副本被丢弃的位置来重新分配?或者别的什么?

c++ vector push-back

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

字符串类的c_str()方法返回什么?

我想访问由字符串类维护的数组的起始地址.

string str="hey";
char* pointer=(char*)str.c_str();
Run Code Online (Sandbox Code Playgroud)
  1. 指针是否指向数组的地址(由字符串类维护)?或字符串类将从动态内存创建一个新数组并将现有字符串复制到其中并返回它的地址?

  2. 如果这不是正确的方法,那么如何访问由字符串类维护的数组的起始地址?

c++

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

c ++ tokenize std string

可能重复:
如何在C++中对字符串进行标记?

您好我想知道如何用strtok标记std字符串

string line = "hello, world, bye";    
char * pch = strtok(line.c_str(),",");
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

error: invalid conversion from ‘const char*’ to ‘char*’
error: initializing argument 1 of ‘char* strtok(char*, const char*)’
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种快速简便的方法,因为我认为它不需要太多时间

c++ tokenize strtok

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

返回的字符串是否从getline()以null结尾?

谷歌搜索一段时间之后我不太确定的一件事是返回的getline()字符串.希望在这里得到确认.

std::getline
Run Code Online (Sandbox Code Playgroud)

这个全局版本返回一个std :: string,因此它不一定是以null结尾的.有些编译器可能附加'\ 0'而其他编译器则不会.

std::istream::getline
Run Code Online (Sandbox Code Playgroud)

此函数返回一个c样式的字符串,因此可以保证字符串以空值终止.

是对的吗?

c++ string getline

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

将C++ 11 std :: string :: operator []返回以null结尾的缓冲区

我有一个std::string类的对象,我需要传递给C函数,char*通过迭代它并搜索空终止符号来操作缓冲区.

所以,我有这样的事情:

// C function
void foo(char* buf);

// C++ code
std::string str("str");
foo(&str[0]);
Run Code Online (Sandbox Code Playgroud)

假设我们使用C++ 11,因此我们保证std::string表示将具有连续存储的字符.

但我想知道是否有任何保证&str[0]会指向缓冲区结束\0?是的,有c_str成员函数,但我在谈论operator[].

有人可以引用标准吗?

c++ c++11

5
推荐指数
2
解决办法
498
查看次数

Null终止字符串,它是否真的由标准规定?

讨论

  • 众所周知,从C++ 11开始,std::basic_strings被认为具有空字符终止的内部存储缓冲区.

  • 除其他之外,这种变化的主要原因是之前的定义std::basic_string只允许对字符串进行非常有限的并发访问,因此对多线程应用程序的性能有限.(有关更改原因的更多信息,请std::basic_string参阅提案N2534).

  • 但是,阅读标准我找不到明确声明std::basic_string必须具有空字符终止内部存储缓冲区的引用.

  • 我发现的唯一隐含引用是§21.4.7.1/ 1和3 basic_string访问器[string.accessors]:

const charT* c_str() const noexcept;

const charT* data() const noexcept;

1返回:一个指针p,p + i == &operator[](i)用于每个iin [0,size()]. 3要求:程序不得更改存储在字符数组中的任何值.

  • 我认为,由于提高效率,并且由于§21.4.7.1/3要求的程序,不得改变返回的缓冲区,在大多数实施者std::basic_string::c_str()std::basic_string::data()正在返回空字符结束内部缓冲区.

  • 但是,该标准并未声明必须返回的缓冲区,std::basic_string::c_str()并且std::basic_string::data()必须是该std::basic_string字符串的内部存储缓冲区,而不是某些空字符终止副本.

问题:

  1. 是否在标准中的某处明确声明std::basic_string内部存储缓冲区必须为空字符终止?
  2. 如果没有明确的陈述(即问题#1短答案是否),这是否意味着实施者可以实现std::basic_string不带有空字符终止的内部存储缓冲区,从而实现自C++ 11以来的广泛传播概念字符串是null终止是错误的?

c++ stdstring language-lawyer c++11 c++14

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

在C++中从std :: string转换为char*

我正在使用VS2012/C++,我需要将std :: string转换为char*,我在网上找不到任何材料给出任何关于如何去做的指导.

任何代码示例和建议将不胜感激.

c++ type-conversion visual-studio-2010

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

字符串中的空终止

是的,我确实检查了其他线程,我得出了结论.我只是想让你确认一下,这样我才不会有任何误解.

Java String对象不以null结尾.

C++ std :: string对象也不是以null结尾

C字符串或C风格的字符串(如果您将(字符数组))是唯一以空值终止的字符串.

正确还是不正确?

c c++ java string

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