C++字符串长度(以字节为单位)
C++ string length in bytes
string str; str="hello"; str.length(); sizeof(str);
我看到 str.length 返回以字节为单位的长度,为什么 sizeof(str) 不返回相同的长度?
在 c++ 中是否有替代 c 命令的 strlen(str)?在 c++ 中,这个库曼德的替代方案是什么?
当我在发送函数中使用 winsock 时,我返回以字节为单位的长度。我应该使用什么?长度?还是大小(str)?公关什么?因为我看到它们会产生不同的结果。
sizeof 返回数据结构的大小,而不是包含中的数据的大小。
length() 返回 str 包含的字符串的长度,并且是你想要的函数
这可能看起来令人困惑,因为sizeof(char[30])是30,但这是因为数据结构的大小是30,无论你在其中输入什么,它都将保持30
字符串实际上是一个非常复杂的结构,但假设它是一个带有指针和长度的简单类
class string
{
char *data;
int length;
};
然后 sizeof(string) 将返回:
字符 * 指针的大小,可能但不一定是 4
加上 int 的大小,可能但不一定是 4
因此,您可能会得到值 8。数据或长度的值对结构的大小没有影响。
sizeof()
并不是真正用于字符串类的。字符串类不仅存储字符串数据;其数据和 C 样式字符串之间没有区别;它还有其他东西,这抛弃了 sizeof()。若要获取字符串中字符的实际长度,请使用 str.length()
。
不要在C++字符串对象上使用 C strlen()。也不要使用 sizeof()。使用.length().
C++中的std::string
被实例化为指向字符串对象的指针,因为字符串可能具有不同的长度。sizeof()
返回的是指向字符串对象的指针的大小(在 32 位机器上可能会4
)
运算符sizeof()
返回给定类型或对象的大小(以字节为单位)。"类型版本"很容易理解,对于"对象版本",您需要记住一件事:
sizeof()
仅查看类型定义,并根据其成员的大小和数量推断总大小(通常,多态和多个继承类型可能具有其他"隐藏"成员)。
换句话说,让我们假设我们有:
struct A
{
int* p1;
char* p2;
};
正如您可能怀疑的那样,sizeof(A)
将返回 8(因为在大多数 32 位系统上指针是 4 字节类型)。但是,当您执行以下操作时:
A a_1;
a_1.p1 = new int[64];
sizeof(a_1)
仍将返回 8。这是因为由 new 分配并由 A 的成员指向的内存并不"属于"此对象。
这就是为什么sizeof(str)
和str.length()
给出不同的结果。 std::string
为堆上的字符分配内存(动态地,通过 malloc()
),因此它不会更改字符串的大小。
因此,如果要通过网络发送字符串,则需要适当的大小str.len()
并且可以通过调用str.c_str()
来检索数据指针。
我并没有理解"strlen(str)
等价物"。在C++中还有strlen()
功能,具有相同的原型,以完全相同的方式工作。它只需要const char*
,所以你不能用它来std::string
(但你可以做strlen(str.c_str())
,因为std::string
的内部字符串保证以null结尾)。对于std::string
,请像您已经做的那样使用.length()
。
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 获取嵌套 stl 容器的大小(以字节为单位)
- 常量"C"占用的空间(以字节为单位)
- C++ 中 STL 中迭代器的大小(以字节为单位)是多少
- 有人知道可以使用 c++ 以字节为单位编码 asm 字符串的任何东西吗?
- 如何以字节为单位计算mpz_class的长度?
- 获取C++模板参数包的总大小(以字节为单位)
- C++/C:Char[]的前缀长度(以字节为单位)(二进制/十六进制)
- visual 在指向缓冲区(字符串 " ")的空指针上使用 sizeof() C++ 以获得以字节为单位的大小?
- 如何获得以字节为单位的UTF-16LE字符串的大小
- 为什么 C/C++ "Hello World" 以千字节为单位?
- C++字符串长度(以字节为单位)
- 解码像 FAST 这样的数据协议的快速方法是什么,其中数据以字节为单位编码,并将位作为存在标志
- 解压缩加密文件(以字节为单位)
- 在 boost::multi_array 中以字节为单位表示步幅
- 省略号函数参数的大小(以字节为单位)
- C++获取EOL的大小(以字节为单位)
- 在openMPI中向进程发送数据(以字节为单位)的最佳方式
- 获取矢量的大小(以字节为单位)
- 如何将数组限制在特定的大小(以千字节为单位)