【问题标题】:C adding one char to bufferC向缓冲区添加一个字符
【发布时间】:2013-05-25 19:12:39
【问题描述】:

我想问一下如何将一个字符添加到缓冲区中。例如:

char buffer[50];
char one_symbol;

如何将 one_symbol 添加到buffer?我不知道当时buffer有多长,所以不能随便写,比如buffer[5] = one_symbol;

谢谢。

【问题讨论】:

  • buffer 是空终止字符串吗?然后循环通过缓冲区寻找空字节。当你找到它时,将新的字符放在那里并将下一个字节设置为空。只要确保你没有超过buffer[49]
  • 你知道什么是 symbol 构成内容结尾吗?

标签: c char buffer


【解决方案1】:

您需要做一些事情来跟踪缓冲区中数据的长度。

关于如何做到这一点,您有多种选择。字符串将数据存储在缓冲区(一个 NUL 字节)中,以指示数据在哪里结束。另一种可能性是在外部存储长度:

typedef struct { 
    char data[50];
    size_t len;
} buffer;

当/如果您希望允许本身可能包含 NUL 字节的数据时,后者尤其可取。如果您不想将缓冲区大小固定为 50,则可以更进一步:

typedef struct { 
    size_t allocated;
    size_t in_use;
    char data[];
};

请注意,这使用了一个灵活的数组成员,该成员是在 C99 中添加的,因此一些较旧的编译器不支持它。

【讨论】:

  • 这是一个很好的答案,但我建议至少有一种解决方案,它不涉及比我们所知道的 OP 所熟悉的更高级的构造。
【解决方案2】:

保持跟踪或缓冲区的当前大小。您可以为此添加一个新变量。

类似:

char buffer[50];
size_t current_size = 0;  /* Buffer is of size zero from the size */

/* ... */

/* Add one character to the buffer */
buffer[current_size++] = 'a';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多