[英]Copy bytes to buffer starting from nth byte of buffer in C
我是 C 的新手,習慣了更高級別的語言,如 JS 和 Python。我正在嘗試將一些字節復制到另一個字節串中的某個 position。
例如,如果我試圖從目標字符串的第 3 個字節開始將 src 字符串復制到目標字符串中,它將如下所示:
src = "888"
dest = "Hello World!"
result = "He888 World!"
基本的復制,你知道你想復制多少字節,你想從哪里取出它們,你想把它們放在哪里,可以用memcpy
完成:
#include <string.h>
char const* src = "888";
char dest[] = "Hello World!";
memcpy(&dest[2], src, 3);
// dest now contains "He888 World!"
這將 3 個字節從src
復制到&dest[2]
(開始后兩個字節)。 與 C 中的大多數內容一樣,由您來確保操作有效。
如果src
的長度是可變的,你可以使用strlen
來找到它的長度:
char const* src = "1234";
char dest[] = "Hello World!";
memcpy(&dest[2], src, strlen(src));
// dest now contains "He1234World!"
如果你想將結果作為兩個輸入的單獨字符串生成,你可以分配 memory 作為字符串的副本,並在進行任何更改之前使用strdup
復制它(這個 memory 必須用free
釋放):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char const* src = "1234";
char const* dest = "Hello World!";
char* result = strdup(dest);
if (result == NULL) {
fputs("failed to allocate memory\n", stderr);
return EXIT_FAILURE;
}
memcpy(&result[2], src, strlen(src));
// result now contains "He1234World!"
free(result);
如果不能以其他方式保證src
適合dest
,您將體驗到避免 integer 溢出的美妙世界:
size_t offset = 2;
if (offset > strlen(dest) || strlen(src) > strlen(dest) - offset) {
fprintf(
stderr,
"src (%zu bytes) is too long to copy into dest (%zu bytes) at offset %zu",
strlen(src), strlen(dest), offset
);
return EXIT_FAILURE;
}
memcpy(&result[offset], src, strlen(src));
希望這不是您的目的所必需的。
您可以嘗試將其逐字節復制到目標字符串。
strcpy(result, dest);
for(int i = start; i < strlen(src); i++)
{
result[i] = src[i - start];
}
start 是你的第 n 個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.