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

ype*_*per 5 c string size buffer

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

我想将一个大小的字符串s写入datafrom buf

我怎样才能完成它?

提前致谢。

Gil*_*il' 5

假如说

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

首先,您需要在data. 不要忘记0字符串末尾的字节空间。

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

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

编辑

正如 caf 所指出的,这项工作的最佳函数是strncat. (它是完全可移植的,是 C89 的一部分。)它附加到目标字符串,因此事先将目标安排为空字符串:

*(char*)data = 0;
strncat(data, buf, s);
Run Code Online (Sandbox Code Playgroud)

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

  • 您的 `memcpy()` 实现有错误 - 它们都错误地放置了 nul 终止符,并且它们尝试取消引用 `void *`,这是您无法做到的。第一个应该使用`((char *)data)[s] = 0`,第二个应该使用`((char *)data)[bytes_to_copy] = 0;`。对于最后一个,你可以使用 `strncat()` 代替 `strncpy()`:`((char *)data)[0] = 0; strncat(data, buf, s);` (2认同)