有什么方法可以使用 memcpy() 将值复制到特定的字符串位置?

Is there any way I can copy values into a specific string position using memcpy()?

我正在努力寻找使用 string.h 函数 memset(...)、memcpy(...) 和 strcat(...) 获取以下字符串的方法:

0000001234abcd

我需要使用 memcpy,但如果不返回到字符串的开头,我找不到这样做的方法。

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h>

void main () {
    char string [15];

    memset((void *)string,'0',6*sizeof(char));
    memcpy(string,"1234",4);
    strcat(string,"abcd");

    printf("String: %s\n",string);
} 

输出-> 字符串:123400abcd

如果有人想出点子,我将不胜感激。

您的代码的行为是未定义

您可以通过写 char string [15] = {'[=10=]'}; 来解决这个问题。这会将 all 字符串内存初始化为零(第一个字符明确设置为 [=11=],后续字符默认初始化为零)。

目前正在发生的事情是 strcat 遍历 string 直到它找到一个空终止符,然后再连接 "abcd"。由于您的 memset 和我已经在您假设 string 初始化为当你写 char string [15];

时为 0

您有两个主要问题:

  • 忘记在使用 memcpy
  • 时指定偏移量
  • 在应用 strcat
  • 时没有终止字符串 null

试试这个:

char string [15] = {0};

memset(string,'0',6);
memcpy(string + 6,"1234",4);
strcat(string,"abcd");

printf("String: %s\n",string);

输出:0000001234abcd

迂腐版:

#include <stdio.h> 
#include <string.h>

int main (void)
{
  char string [15];
  const char substr1 [] = "1234";
  const char substr2 [] = "abcd";
  const size_t zeroes = 6;

  memset(string, '0', zeroes);
  memcpy(&string[zeroes], substr1, sizeof(substr1)); // includes null term
  strcat(string, substr2);

  printf("String: %s\n", string);
  return 0;
}