Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 读取函数获取额外的字母c++;_C++ - Fatal编程技术网

C++ 读取函数获取额外的字母c++;

C++ 读取函数获取额外的字母c++;,c++,C++,我得到的结果是: 最后我得到了额外的r。我猜这是因为最后剩下的字母数少于len,len是10个。 有办法解决这个问题吗?我发现有两个潜在的问题: abcdefg hijklmnop qrstuv wxyz 这假设您总是准确地读取len字节。如果读取的数据较少,nul终止字符和成功读取的数据之间将存在一些垃圾 另一种是在if条件失败的情况下;您从不向ch指向的数组中添加nul终止字符(就像您对n\u ch所做的那样),因此将其作为字符串写入标准输出可能会导致越界读取 >在C++中处理字符串

我得到的结果是:

最后我得到了额外的r。我猜这是因为最后剩下的字母数少于len,len是10个。
有办法解决这个问题吗?

我发现有两个潜在的问题:

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';