问题标签 [c-str]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6081 浏览

c++ - std::string::c_str & 空终止

我已经阅读了各种描述,std::string::c_str包括多年来/几十年对 SO 提出的问题,

我喜欢这个描述的清晰:

返回一个指向数组的指针,该数组包含一个以空字符结尾的字符序列(即一个 C 字符串),表示字符串对象的当前值。此数组包含构成字符串对象值的相同字符序列,以及末尾的附加终止空字符 ('\0')。

然而,关于这个函数的目的的一些事情仍然不清楚。

您可能会认为调用可能会在存储在主机对象 ( ) 的内部 char 数组中的字符串末尾c_str添加一个字符,这是可以原谅的:\0std::string

但似乎std::string对象在调用之前默认为 Null 终止c_str在此处输入图像描述

看完定义后:

我没有看到任何会添加\0到 char 数组末尾的代码。据我所知c_str,只是返回一个指向存储在数组第一个元素中的 char 的指针,就像这样begin()做一样。我什至没有看到检查内部数组是否被终止的代码\0

还是我错过了什么?

0 投票
3 回答
1594 浏览

c++ - ifstream + 打开随机 txt 文件 (c_str)

我想打开一个随机.txt文件并将数据放入一些字符串中。如果我将路径写入代码,它会起作用。

我不明白为什么这不起作用。

0 投票
3 回答
1659 浏览

c++ - C++03和C++11在c_str函数规范上的区别

在下面的 C++参考中出现:c_str()std::string

返回值
指向底层字符存储的指针。
data()[i] == operator[](i) for every i in [0, size())(C++11 前)
data() + i == &operator[](i) for every i in [0, size()] (C++11 起)

我不明白两者之间的区别,除了自 C++11 以来范围增加了一个元素。

前一种说法不data()[i] == operator[](i)也适用于后者吗?

0 投票
2 回答
130 浏览

c++ - 将 strstream 转换为关于 c_str() 的 sstream 冲突

我有这个代码块,用strstream. 我将其转换sstream为如下。我不确定,但我认为printStream->str()返回一个字符串对象,其中包含 指向的流缓冲区中的内容的副本(临时),printStream然后您调用c_str()它并获取 a const char *,然后丢弃 const-ness ,然后返回函数范围之外的指针。我认为由于它是一个临时值printStream->str(),因此您将在此函数之外使用指向已释放内存的指针。我该怎么做?

0 投票
1 回答
44 浏览

c++ - Char 指针未按预期初始化

我的类.h

我的类.cpp

主文件

我期待程序输出Text_5,而不是输出:

╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠​ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠⌠╠╠╠╠╠╠╠╠

0 投票
1 回答
95 浏览

c++ - 请解释以下程序的输出

只需运行这个程序并解释最后一行的输出为什么它打印“g”而不是“f”。在这里我的目的是知道为什么它显示以前的函数返回值?

0 投票
2 回答
835 浏览

c++ - 使用 String c_str() 返回 char*

我正在处理一些遗留代码,我必须在 cpp 文件中进行一些更改。cpp 文件包含外部“c”块中的整个代码 -

我更新了一个返回 char* 的函数。代码看起来像下面的 func1() 。由于我使用 std::strring 和 stringstream 我在 extern 块之前包含了 sstream 和 string 头文件。下面的函数是从 c 和 cpp 文件中调用的。所以我不能在这里返回 std::string -

在调用此函数的地方之一 -

以下是我的查询 -
1) 在 (a) 我可以以以下 2 种形式返回 char*。我必须做出决定,以便在 (b) 处复制不会导致任何未定义的行为 -

哪一个是更好的解决方案?

0 投票
1 回答
303 浏览

c++ - std::string 的 c_str() 函数如何返回空终止字符串?

我无法理解从 string.c_str() 返回的 char * 是否指向同一个缓冲区(并且不进行任何复制)它是如何以空值终止的?该函数是否在字符串末尾添加空终止符?如果缓冲区没有任何额外的字节来存储它会发生什么?

谢谢。

0 投票
1 回答
51 浏览

c++ - 重新编译我们的 FORTRAN 代码并在 C++ 中使用它后,我们的 system() 或 c_str() 命令无法正常工作

嗨我有一个大问题:我们在 C++/Qt 4.8.4 /Qt Creator 2.8.1 年前创建了一个程序,在执行时运行另一个可执行文件(用 FORTRAN 编写和编译)。一切运作良好。

我们用新版本的 Visual Studio 重新编译了我们的 Fortran 代码,现在突然它不再工作了。我查看了我的 C++-Code 并找到了程序崩溃的位置:

不知何故system((Executable+" > "+"X.out2").c_str())变得真实,这在以前没有发生过。

这似乎发生在c_str -command 或system() -command 中。

我们之前有一些缺失的 dll 问题。这是另一个 dll 问题吗?如果是,是哪个?

有人可以帮助我们吗?

谢谢

0 投票
3 回答
217 浏览

c++ - 哈希函数中对 c_str() 与 const char* 的函数调用

当我发现一个非常有趣的哈希函数时,我正在查看 stackoverflow 上的哈希函数。它涉及将 const char* 强制转换为 size_t*,然后取消引用 size_t。然后将其位移到一定的精度。这适用于 const char*,每次都产生相同的值。但是,当我使用实际的字符串类型并调用 c_str() 时,生成的两个值不匹配。此外,在代码的每次运行中,字符串每次运行都会产生不同的值。任何人都知道为什么会发生这种情况?

运行 1:

运行 2:

原始问题:C++ 哈希表有一个好的哈希函数吗?