【问题标题】:How do I know if a string is null terminated?我如何知道一个字符串是否为空终止?
【发布时间】:2011-10-25 13:19:48
【问题描述】:

我正在使用 fgetc 从文件中读取字符串。因为我不知道字符串需要多长时间,所以我需要为应该保存数据的数组重新分配空间。为此,我需要知道当前数组何时已满。我不太确定 char 数组在读取一个字符后是否为空终止。因此,例如,我有一个大小为 8 的数组,而 fgetc 将给我第 9 个字符。现在数组的大小是 8 还是 9? (8 个字符 + \0 或只有 8 个字符)。有没有办法测试它?如果没有\0。读完字符串后需要自己添加到char数组中吗?

【问题讨论】:

  • 所有标准字符串函数都依赖于一个 NULL 字符,所以是的,你必须添加它,否则你会遇到奇怪的问题

标签: c string


【解决方案1】:

您需要跟踪缓冲区的当前大小以及添加字符的位置。那么如果位置等于你需要增加缓冲区的大小。实际大小应为 +1 以容纳终止 \0 字符,您必须始终在读取的最后一个字符之后添加该字符。

【讨论】:

    【解决方案2】:

    由于 fgetc 每次调用读取一个字符,要获取字符串的大小,您应该检查读取的字符是否为 \0 或到达 EOF。如果您看到 \0 字节,则应复制包括 \0 在内的所有字节。如果在没有 \0 的情况下到达 EOF 并且字符计数器 > 0,则应自己添加 \0。

    【讨论】:

      【解决方案3】:

      当您使用 fgetc 时,您正在构建逐字节保存字符串的内存,因此您需要将内存分配为总字符串长度 + 1,因为您需要额外的字节用于终止字符“\0”。

      使用“字符串”的函数实际上是在查看以 '\0' 结尾的字节集合。因此,例如“Hello World”在内存中存储为 'H' 'e' 'l' 'l' 'o' 'W' 'o' 'r' 'l' 'd' '\0' ;这就是函数知道何时停止处理字符串的方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-28
        • 2013-02-20
        • 2011-06-15
        相关资源
        最近更新 更多