std:string能否在初始化以后复制指定长度的字符串

std::string可不可以在初始化以后复制指定长度的字符串
代码1
include <string>
#include <iostream>

int main()
{
char a[20] = "abc";
a[4] = 50;

std::string str1(a,5);

std::cout<<str1.size();
}
结果是5

代码2
#include <string>
#include <iostream>

int main()
{
char a[20] = "abc";
a[4] = 50;

std::string str1;

str1.erase();

str1 = a;

//这里有什么办法将有可能将中间含有0的指定长度字符串复制给str1吗?

std::cout<<str1.size();
}
结果是3


有什么方法可以在string已经定义之后复制指定长度的字符串到str吗,也就是不使用string的构造函数的话有没有办法将中间含有0的指定长度的字符串传给string

------解决思路----------------------
std::string::assign