C++ std :: string :: assign很奇怪

r_s*_*spb 1 c++ string

需要经验丰富的工程师帮助.我写了一个函数,它获取一个字符串并从中获取一个子字符串.子串用逗号','分隔.我使用assign()函数来复制子串.我的代码:

void my_function(string devices)
{
    unsigned int last=0;
    unsigned int address;
    printf("whole string: %s\n",devices.c_str());

    for (unsigned int z=0; z<devices.size();z++)
    {
        if(devices[z]==',')     
        {
            zone_name.assign(devices,last,z);
            printf("device:%s\n",zone_name.c_str());
            address=get_kd_address_by_name(zone_name);
            last=z+1;
            if(address>0)
            {   
                //doing stuff
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题:只有第一次迭代才有效.在终端我得到:

whole string: device1,device2,device3,000001029ADA
device:device1
device:device2,device3
device:device3,000001029ADA
Run Code Online (Sandbox Code Playgroud)

为什么assign()接受','之后的字符?

Ben*_*ley 8

std::string::assign(你正在使用的超载)需要一个位置和一个长度.不是两个职位.zdevices字符串中的位置.它仅适用于第一个字符串,因为在这种情况下,您的起始位置为0,因此长度和结束位置是相同的.

unsigned int length = z - last;
zone.assign(devices, last, length);
Run Code Online (Sandbox Code Playgroud)