gpt4 book ai didi

C - 从一定大小的缓冲区中读取字符串

转载 作者:太空狗 更新时间:2023-10-29 15:14:31 25 4
gpt4 key购买 nike

我有一个char buf[x]int svoid* data

我想从 buf 中写入一个大小为 s 的字符串到 data 中。

我怎样才能完成它?

提前致谢。

最佳答案

假设

  • “字符串”是指 C 中通常表示的以 null 结尾的字符串;
  • 你还没有在data中分配内存;
  • 你已经知道 s <= x

首先你需要在data中分配内存。不要忘记字符串末尾 0 字节的空间。

data = malloc(s+1);
if (data == NULL) {
... /*out-of-memory handler*/
}

假设 malloc 成功,您现在可以复制字节。

编辑:

正如 caf 所指出的,最适合这项工作的函数是 strncat(它是完全可移植的,是 C89 的一部分。)它附加到目标字符串, 所以事先把destination设置为空字符串:

*(char*)data = 0;
strncat(data, buf, s);

其他较差的可能性,保留在这里作为相关功能的示例:

  • 如果您有 strlcpy(它不是标准 C,但在现代 Unix 系统中很常见;有一些公共(public)领域的实现):

    strlcpy(data, buf, s+1);
  • 如果您知道源字符串中至少有 s 个字符,您可以使用 memcpy:

    memcpy(data, buf, s);

    ((char*)数据)[s+1] = 0;

  • 否则您可以先计算源字符串的长度:

    size_t bytes_to_copy = strlen(buf);
    if (bytes_to_copy > s) bytes_to_copy = s;
    memcpy(data, buf, bytes_to_copy);
    ((char*)data)[s+1] = 0;
  • 或者您可以使用 strncpy,但如果源字符串的实际长度比 s 小得多,则效率很低:

    strncpy(data, buf, s);
    ((char*)data)[s+1] = 0;

关于C - 从一定大小的缓冲区中读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3276121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com