需要将一些数据直接读入字符串并将其传递给其他函数。但我不知道如何在将数据复制到其中后设置大小。
string s;
s.reserve(10000);
int n = recv(sock, s.c_str(), 10000);
//how to set the s to have size/length n?
proc(s);
据我所知,我可以分配一个10000字节的buf并将数据保存到它,然后从buf创建一个字符串对象,但效率不高。
UPDATE1 这个问题是关于方法reserve()或resize()的区别。这是关于使用具有足够空间的字符串作为缓冲区来存储来自网络套接字的一些字节。
UPDATE2
我只需要使以下代码段工作。当然,s.resize(n)
会将写入为此字符串对象保留的空间中的内容清零。需要一种方法让它发挥作用。
#include <stdio.h>
#include <string>
using namespace std;
int main (int argc, char *argv[]) {
string s;
s.reserve(100);
int n = sprintf((char*)(s.c_str()), "hello %f\n", 45.32);
printf("n=%d\n", n);
s.resize(n);
printf("%s\n", s.c_str()); //expect to print hello 45.32
return 0;
}
UPDATE3
执行resize()
有时可能有效,但始终无法正常工作。
如下面的代码片段所示,第二个printf()应该打印25个字符,但它只打印16个字符。
#包括
#包括
使用namespace std;
int main (int argc, char *argv[]) {
string s;
s.resize(20);
int n = sprintf((char*)(s.c_str()), "helo %f\n", 45.32);
printf("n=%d\n", n);
//s.length = n;
s.resize(n);
printf("%ld %p %s\n", s.size(), s.data(), s.data());
n = sprintf((char*)(s.c_str()), "hello world!!! %f\n", 45.32);
printf("n=%d\n", n);
s.resize(n);
printf("%ld %p %s\n", s.size(), s.data(), s.data());
return 0;
}