微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C ++中将自定义字符串分配给字符串属性

如何解决在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 举报,一经查实,本站将立刻删除。