2013-05-05 80 views
0

我定义了一个数组:char数组的strlen大于它的大小。如何避免?

char arr [1480];

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

然后,我做strlen(数组)和它返回1512.怎么回事?这只发生在某些场合,但不是在所有情况下,即使每次我从档案中读取,我总会读到1480个字符。

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

由于

PS:我问一个问题早先我的指针被garbaged,这是原因时,我有长度的缓冲液(ARR)> 1480

+1

你可能不是终止数组 - arr [1479] ='\ 0''。 – Yuushi 2013-05-05 04:11:02

回答

6

阵列大小必须包括字符串终止符。由于您读取数组的大小,所以您不能(也不)添加字符串终止符。 strlen函数和所有其他字符串函数使用字符串结束符来查找字符串的结尾。如果不存在,它会一直持续到找到它。

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

+0

这是正确的答案。 – playerone 2013-05-05 04:12:26

+0

它是'\ 0'还是'\\ 0'?在下面这个例子中,他们使用后者:http://www.learncpp.com/cpp-tutorial/912-shallow-vs-deep-copying/ – Simo 2013-05-05 04:36:34

+0

@Simo:''\\ 0''几乎总是一个错误;它是一个不可移植的多字符字符常量。网页上的例子是一个错误。 – 2013-05-05 04:54:20

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. 

希望它有帮助。