我正在使用BSPlib,我想使用bsp_put,这需要我设置我发送的字符串的大小。 即使你不熟悉BSP,这也没有密切关系。感谢。
答案 0 :(得分:10)
将字符数(由size()
或capacity()
给出,如果您想知道分配的总金额而不是使用的金额)乘以字符类型的大小。
如果std::string
本身是std::basic_string<char>
的别名,那么字符大小就是一个字节,因此size()
(或capacity()
)就可以了。
答案 1 :(得分:2)
答案 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);
这可能是获得字符串长度的最有效方法。让我知道,当您使用此示例向他们展示您的新解决方案时,您的同事会给您带来多大的印象。