相关疑难解决方法(0)

863
推荐指数
7
解决办法
89万
查看次数

string :: c_str()在C++ 11中不再以null结尾吗?

在C++中,11 basic_string::c_str被定义为完全相同basic_string::data,而后者又定义为*(begin() + n)*(&*begin() + n)(when 0 <= n < size())完全相同.

我找不到任何要求字符串在其末尾始终具有空字符的内容.

这是否意味着c_str()不再保证生成以null结尾的字符串?

c++ string c++11

72
推荐指数
3
解决办法
8440
查看次数

使用std :: string与C风格API交互时,是否可以避免使用临时缓冲区?

我应该在这个问题前面说我认为答案可能不是,但我想看看其他人对这个问题的看法.

我花了大部分时间编写与Win32 API交互的C++,就像大多数C风格API想要的那样:

  1. 拿我提供的缓冲液并对它们进行操作.
  2. 或者返回指向我需要稍后释放的缓冲区的指针.

这两种情况本质上都意味着如果你想std::string在你的代码中使用,你必须接受这样一个事实,即你每次std::string从临时缓冲区构造一个字符串时都会进行大量的字符串复制.

什么会很好:

  1. 能够允许C风格API安全地直接改变std::string并预先保留其分配并提前设置其大小(以缓解方案1)
  2. 能够包裹std::string现有的char[](以缓解方案2)

有没有一种很好的方法来做其中任何一种,或者我应该接受使用std::string旧学校API 的固有成本?看起来情况1看起来特别棘手,因为它std::string有一个短的字符串优化,因此它的缓冲区可以在堆栈或堆上,具体取决于它的大小.

c c++

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

直接写入std :: string的char*buffer

所以我有一个std::string并且有一个函数可以接受char*并写入它.既然std::string::c_str()std::string::data()回来了const char*,我不能用它们.所以我分配了一个临时缓冲区,用它调用一个函数并将其复制到std::string.

现在我计划处理大量信息,复制这个缓冲区会产生明显的影响,我想避免它.

有人建议使用&str.front()&str[0]但是它会调用未定义的行为吗?

c++ string language-lawyer c++14 c++17

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

什么是 C++ 中对“char()”、“uint8_t()”、“int64_t()”、整数“T()”等的调用?

我以前从未见过这个函数的调用char()。这是在哪里描述的,它是什么意思?此用法是此 cppreference.com 社区 wiki 页面上示例的一部分:https://en.cppreference.com/w/cpp/string/basic_string/resize

short_string.resize( desired_length + 3 );
std::cout << "6. After:  \"";
for (char c : short_string) {
    std::cout << (c == char() ? '@' : c);  // <=== HERE ===
}
Run Code Online (Sandbox Code Playgroud)

描述中的措辞对我来说也没有任何意义,我不明白它在说什么:

将附加字符初始化为CharT().

在上下文中突出显示:

在此输入图像描述

相邻相关

  1. 促使我研究该std::string::resize()方法的原因是尝试学习如何预先分配 astd::string以便在 C 函数调用中用作缓冲区char*。这可以通过首先std::string调用my_string.resize()函数来预分配 来实现。然后,您可以安全地&my_string[0]作为标准char*写入索引my_string.size() - 1。也可以看看:
    1. 直接写入 std::string 的 char* 缓冲区
    2. 有没有办法获取 std:string 的缓冲区
    3. 如何将 a 转换std::string …

c++ initialization char

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

标签 统计

c++ ×5

string ×3

char ×2

c ×1

c++11 ×1

c++14 ×1

c++17 ×1

const ×1

initialization ×1

language-lawyer ×1