如何用等效的strcat()替换memcpy()?

时间:2016-11-18 05:19:22

标签: c arrays string memcpy strcat

我有以下代码可以正确地将子字符串插入到原始字符串的特定部分。如何使用query代替"query": { "bool": { "filter": [ { "term": { "color": "red" }}, { "term": { "brand": "gucci" }} ] } } 来执行相同的操作?

query

strcat()是原始字符串,memcpy()是子字符串应该从哪个开始的元素,void insertString(char original[], int start, int length, char toInsert[]){ size_t insertlen = strlen(toInsert); size_t origlen = strlen(original); char *m = malloc(origlen - length + insertlen); memcpy(m, &original[0], start); memcpy(m+start, &toInsert[0], insertlen); memcpy(m+start+insertlen, &original[start+length], origlen-length+insertlen); strcpy(original,m); } 是从char original[]int start中删除的子字符串的长度{1}}是要插入的子字符串。

澄清的例子:

离。如果 int lengthoriginal[]char toInsert[]original[] = default string 1

结果start = 5等于' defauhello worlding 1'因为在这个例子中被替换的子串是' lt str'从5个字符开始,长度为6个字符。如何使用length = 6而不是toInsert[] = hello world执行相同的操作?

2 个答案:

答案 0 :(得分:0)

您可以使用strncat并以下面的方式执行此操作。但请注意,以下内容并不处理您在此问题中遇到的错误情况和其他限制。

void insertString(char original[], int start, int length, char toInsert[]){
  size_t insertlen = strlen(toInsert);
  size_t origlen = strlen(original);
  size_t newBuffLen = origlen - length + insertlen + 1
  char *m = malloc(newBuffLen);
  memset(m, 0, newBuffLen);
  strncat(m, original, start);
  strncat(m, toInsert, insertlen);
  strncat(m, original + start+ length, origlen-start-length);
  strcpy(original,m);
}

答案 1 :(得分:0)

我已将其替换为以下内容并且完美无缺

void insertString(char original[], int start, int length, char toInsert[]){
  size_t insertlen = strlen(toInsert);
  size_t origlen = strlen(original);
  char holder[origlen - length + insertlen];
  strcpy(holder,"");
  strncat(holder,original,start);
  strcat(holder,toInsert);
  strncat(holder, &original[start+length], origlen-length+insertlen);
  strcpy(original,holder);
}

谢谢大家的帮助!