【问题标题】:strlen of a char array is greater than its size. How to avoid?char 数组的 strlen 大于其大小。如何避免?
【发布时间】:2013-05-06 13:37:48
【问题描述】:

我定义了一个数组:

字符 arr[1480];

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

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

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

谢谢

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

【问题讨论】:

  • 你可能不是 null 终止数组 - arr[1479] = '\0'.

标签: c++ arrays pointers size


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

试试这样写?只是一个小样本

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.

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2021-06-07
    • 1970-01-01
    相关资源
    最近更新 更多