我定义了一个数组:

char arr [1480];

现在,从文件中,我精确地读取了1480个字符并将其放入arr(通过执行arr [i] = c)。
我知道1480个字符,因为我使用while循环一次读取一个字符(istream.get()),并在递增索引= 1480时停止。

但是,在那之后,我做了strlen(array)并返回1512。为什么呢?这仅在某些情况下发生,但并非在所有情况下都发生,即使每次我从文件读取时,我总是读取多达1480个字符。

我怀疑一个字符可能会占用1个以上的单位(由strlen(arr)返回的单位)。
如果是这样,我该如何解决?

谢谢

PS:我之前曾问过一个有关我的指针被浪费的问题,这就是当我的缓冲区(arr)的长度> 1480时的原因。

最佳答案

数组大小必须包含字符串终止符。由于您精确地读取了数组的大小,因此无法(也不能)添加字符串终止符。 strlen函数以及所有其他字符串函数,使用字符串终止符查找字符串的结尾。如果不存在,它将继续直到找到它。

如果字符串中的字符数不能超过1480个,则应使用大小为1481的数组,最后一个为字符串终止符'\0'

关于c++ - char数组的strlen大于其大小。如何避免?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16381307/

10-09 18:40