问题标签 [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.
c++ - std::string::c_str & 空终止
我已经阅读了各种描述,std::string::c_str
包括多年来/几十年对 SO 提出的问题,
我喜欢这个描述的清晰:
返回一个指向数组的指针,该数组包含一个以空字符结尾的字符序列(即一个 C 字符串),表示字符串对象的当前值。此数组包含构成字符串对象值的相同字符序列,以及末尾的附加终止空字符 ('\0')。
然而,关于这个函数的目的的一些事情仍然不清楚。
您可能会认为调用可能会在存储在主机对象 ( ) 的内部 char 数组中的字符串末尾c_str
添加一个字符,这是可以原谅的:\0
std::string
但似乎std::string
对象在调用之前默认为 Null 终止c_str
:
看完定义后:
我没有看到任何会添加\0
到 char 数组末尾的代码。据我所知c_str
,只是返回一个指向存储在数组第一个元素中的 char 的指针,就像这样begin()
做一样。我什至没有看到检查内部数组是否被终止的代码\0
还是我错过了什么?
c++ - ifstream + 打开随机 txt 文件 (c_str)
我想打开一个随机.txt
文件并将数据放入一些字符串中。如果我将路径写入代码,它会起作用。
我不明白为什么这不起作用。
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)
也适用于后者吗?
c++ - 将 strstream 转换为关于 c_str() 的 sstream 冲突
我有这个代码块,用strstream
. 我将其转换sstream
为如下。我不确定,但我认为printStream->str()
返回一个字符串对象,其中包含 指向的流缓冲区中的内容的副本(临时),printStream
然后您调用c_str()
它并获取 a const char *
,然后丢弃 const-ness ,然后返回函数范围之外的指针。我认为由于它是一个临时值printStream->str()
,因此您将在此函数之外使用指向已释放内存的指针。我该怎么做?
c++ - Char 指针未按预期初始化
我的类.h
我的类.cpp
主文件
我期待程序输出Text_5
,而不是输出:
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠⌠╠╠╠╠╠╠╠╠
c++ - 请解释以下程序的输出
只需运行这个程序并解释最后一行的输出为什么它打印“g”而不是“f”。在这里我的目的是知道为什么它显示以前的函数返回值?
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) 处复制不会导致任何未定义的行为 -
哪一个是更好的解决方案?
c++ - std::string 的 c_str() 函数如何返回空终止字符串?
我无法理解从 string.c_str() 返回的 char * 是否指向同一个缓冲区(并且不进行任何复制)它是如何以空值终止的?该函数是否在字符串末尾添加空终止符?如果缓冲区没有任何额外的字节来存储它会发生什么?
谢谢。
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 问题吗?如果是,是哪个?
有人可以帮助我们吗?
谢谢
c++ - 哈希函数中对 c_str() 与 const char* 的函数调用
当我发现一个非常有趣的哈希函数时,我正在查看 stackoverflow 上的哈希函数。它涉及将 const char* 强制转换为 size_t*,然后取消引用 size_t。然后将其位移到一定的精度。这适用于 const char*,每次都产生相同的值。但是,当我使用实际的字符串类型并调用 c_str() 时,生成的两个值不匹配。此外,在代码的每次运行中,字符串每次运行都会产生不同的值。任何人都知道为什么会发生这种情况?
运行 1:
运行 2:
原始问题:C++ 哈希表有一个好的哈希函数吗?