如何获取程序中特定字符串占用的字节数?

时间:2010-12-21 13:59:12

标签: c++

我正在使用BSPlib,我想使用bsp_put,这需要我设置我发送的字符串的大小。 即使你不熟悉BSP,这也没有密切关系。感谢。

4 个答案:

答案 0 :(得分:10)

将字符数(由size()capacity()给出,如果您想知道分配的总金额而不是使用的金额)乘以字符类型的大小。

如果std::string本身是std::basic_string<char>的别名,那么字符大小就是一个字节,因此size()(或capacity())就可以了。

答案 1 :(得分:2)

strlen返回普通C字符串的字符串长度。

  

C字符串与字符串开头和终止空字符之间的字符数一样长。

如果您正在使用String对象,则可以使用对象的lengthsize方法:

http://www.cplusplus.com/reference/string/string/length/

答案 2 :(得分:1)

std :: string中的字符数可以由std :: string的“size()"成员获得。

std::string s = "Hey, look, I'm a string!"
std::string::size_type len = s.size();
std::cout << "My string is " << len << "characters long." << std::endl;

正如人们所指出的,除了两种情况外,你不能依赖std :: string的内存组织:std::string::data()std::string::c_str()。这些函数中的每一个都返回一个指向连续内存的指针,该内存与字符串保持相同的字符。 (内存可能会也可能不会指向真正的字符串,但无关紧要,无论如何都无法写入。)两次调用之间的区别在于内存是否有终止空字节:data()没有终止字符c_str()

// assuming that bsp_put_bytes takes a pointer & len
bsp_put_bytes(s.data(), s.size());

// and bsp_put_string takes a C-style string
bsp_put_string(s.c_str());

仔细阅读我给你的链接中的警告,包括指向角色的有效生命周期。

答案 3 :(得分:-4)

std::string myString("this is the text of my string");
const char *copyOfString = strdup(myString.c_str());
size_t myStringLength = strlen(copyOfString);
free(copyOfString);

这可能是获得字符串长度的最有效方法。让我知道,当您使用此示例向他们展示您的新解决方案时,您的同事会给您带来多大的印象。