C++ 读取函数获取额外的字母c++;
我得到的结果是: 最后我得到了额外的r。我猜这是因为最后剩下的字母数少于len,len是10个。C++ 读取函数获取额外的字母c++;,c++,C++,我得到的结果是: 最后我得到了额外的r。我猜这是因为最后剩下的字母数少于len,len是10个。 有办法解决这个问题吗?我发现有两个潜在的问题: abcdefg hijklmnop qrstuv wxyz 这假设您总是准确地读取len字节。如果读取的数据较少,nul终止字符和成功读取的数据之间将存在一些垃圾 另一种是在if条件失败的情况下;您从不向ch指向的数组中添加nul终止字符(就像您对n\u ch所做的那样),因此将其作为字符串写入标准输出可能会导致越界读取 >在C++中处理字符串
有办法解决这个问题吗?我发现有两个潜在的问题:
abcdefg
hijklmnop
qrstuv
wxyz
这假设您总是准确地读取len
字节。如果读取的数据较少,nul终止字符和成功读取的数据之间将存在一些垃圾
另一种是在if
条件失败的情况下;您从不向ch
指向的数组中添加nul终止字符(就像您对n\u ch
所做的那样),因此将其作为字符串写入标准输出可能会导致越界读取
<> >在C++中处理字符串的首选方法是<代码> STD::String < /C> >,而不是数组。如果您切换到使用字符串,这里的许多问题都会消失——您也不必担心释放自己的内存。在这个简单的示例中,内存管理有两个问题,可以使用
std::string
自动处理:
- 在
中泄漏分配ch
- 您可以调用
delete n\u ch代码>当它指向数组分配时。您必须执行
delete[]n\u ch代码>取而代之
is.gcount()
在示例中,它可以帮助您确定实际读取的字符数。
abcdefg
hijklmnop
qrstuv
wxyz
n_ch[len]= '\0';