如何解决在C ++中将自定义字符串分配给字符串属性
typedef struct _connection {
int socket; // host-to-client socket id.
struct sockaddr address; // address of client.
int address_length; // length of address field.
std::string user;
std::string group;
int connected;
}
和主要代码,其中conn
是此结构的实例:
char buffer[256];
std::string s = std::string(buffer);
conn->user = s.substr(0,s.find(' '));
但是,最后一行给出了分段错误。我知道conn
不为空,s.substr(0,s.find(' '))
也不为空。我不知道的结构分配中有规则吗?
解决方法
您可以构造一个临时std::string
,将其直接移动分配(而不是复制)到s.user
中,如下所示。不需要从不一定以空字符结尾的s
创建buffer
的潜在危险:
#include <algorithm>
#include <iterator>
s.user = std::string(std::begin(buffer),// create a string from the start
std::find(std::begin(buffer),// find from the start
std::end(buffer),// ... to the end
' ' // ... and look for space
)
);
这使用了{ iterators 。第一个指向开始复制的位置,第二个迭代器指向结束,std::string
将返回。
如果找不到空间,将使用整个std::find
。
还值得注意的是:您拥有的buffer
只会被忽略,因此只需将其删除:
typedef
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。