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

时间:2016-12-06 11:38:45

标签: c arrays string memcpy memset

我很难找到使用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);
} 

输出 - &GT;字符串:123400abcd

如果有人提出想法,我会非常感激。

3 个答案:

答案 0 :(得分:3)

您有两个主要问题:

  • 忘记使用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

答案 1 :(得分:3)

迂腐版:

#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;
} 

答案 2 :(得分:1)

代码的行为是未定义

您可以写\0来解决这个问题。这会将所有字符串内存初始化为零(第一个字符显式设置为strcat,后续字符默认初始化为零。)

目前正在发生的事情是string遍历"abcd",直到它找到一个nul-terminator,然后再连接memset。由于您的string以及未定义的行为,我们已经在您假设char string [15];初始化为0时已经提到过,因此该流程正在发出两个额外的字符写DataTrigger