0

我定义了一个数组:

字符 arr[1480];

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

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

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

谢谢

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

4

2 回答 2

6

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

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

于 2013-05-05T04:11:12.607 回答
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.

希望能帮助到你。

于 2013-05-06T05:37:48.873 回答