char数组的strlen大于其大小。怎么避免?

时间:2013-05-05 04:09:03

标签: c++ arrays pointers size

我定义了一个数组:

char arr [1480];

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

然而,在那之后,我做strlen(数组)并返回1512.为什么?这种情况只会在某些情况下发生,但并非在所有情况下都会发生,即使每次从文件中读取,我总是读取最多1480个字符。

我怀疑是一个char可能占用超过1个单位(由strlen(arr)返回的单位)。 如果是这样,我该如何解决这个问题?

由于

PS:我之前问过一个关于我的指针被装入的问题,这就是我有一个长度为>的缓冲区(arr)的原因。 1480.

2 个答案:

答案 0 :(得分:6)

数组大小必须包含字符串终止符。由于您确切地读取了数组的大小,因此您不能(并且不)添加字符串终止符。 strlen函数和所有其他字符串函数使用字符串终止符来查找字符串的结尾。如果不存在,它将一直持续到找到它为止。

如果字符串中的字符数不超过1480个,则应该有一个大小为1481的数组,最后一个是字符串终结符'\0'

答案 1 :(得分:0)

尝试以这种方式写作?只是一点点样本

char arr[1481]=0x00; //define all the array with string terminator
memcpy(arr,BufCopyFrom, 1480); //BufCopyFrom is the Buffer being copied and specified to copy 1480 bytes.

希望它有所帮助。