unknownDf['Text']
输出为:
xxxxxx
appleap
为什么str1不能在“ xxxxxx”之后打印,但是为什么逐字符访问str1时为什么要打印?
有人可以帮助我吗?
答案 0 :(得分:1)
也许您想使用str1.push_back(str [i])。
基本上,您的str1以此方式用作字符数组,而不是C ++字符串对象。
Edit1:当您使用方括号访问str1时,C ++假定字符串已经具有分配的大小来覆盖此访问,而您的情况并非如此。 因此,您可以push_back或先为str1保留一些大小。
答案 1 :(得分:1)
为什么str1不能在“ xxxxxx”之后打印?
因为在默认构造函数创建时该字符串为空。
为什么逐个字符访问str1时为什么要打印?
因为您非法访问了您之前分配了非法值的内存。
要将operator[]
上的std::string
与索引pos
一起使用,则字符串大小必须至少为pos + 1,否则会出现不确定行为documenatation
返回对指定位置pos处字符的引用。不执行边界检查。如果pos> size(),则行为是不确定的。
在特殊情况下,pos == size()
与您的情况无关。
答案 2 :(得分:0)
for(int i=0;i<str.size();i++)
str1[i]=str[i];
在operator[]
上使用std::string
时,不会检查要访问的索引是否正确。在此循环中,您尝试访问空字符串的元素,这是未定义的行为,意味着任何事情都可能发生。
如果您想复制std::string
,只需使用operator=
,就像这样
str1 = str;
str
将复制str
的内容,因此您不必手动进行操作。