【问题标题】:concat two *chars w/o string functions?连接两个 *chars 没有字符串函数?
【发布时间】:2015-04-05 19:30:24
【问题描述】:

我试图弄清楚如何在不使用字符串复制和字符串连接的情况下将两个 *char 连接在一起。

到目前为止我有这个:

char *concat(char *pt1, char *pt2)
{
    char* c;
    c = malloc(strlen(a) + strlen(b));
    return c;
}

如果我使用的是字符串函数,我可以这样做:

  strcpy(str3, str1);
  strcat(str3, str2);

有什么提示吗?

【问题讨论】:

  • 终结符加 1。 c = malloc(strlen(pt1) + strlen(pt2) + 1);
  • 检查malloc()的返回值。然后从每个字符串复制,直到到达 0 终止符。
  • 谢谢,忘了终结者了。

标签: c pointers concatenation


【解决方案1】:

Weather Vane 所述,为终结者'\0' 加1。在你的函数中使用它:-

char *concat(char *str1, char *str2)
{
  char* str3; 
  int i=0; 
  str3 = malloc(strlen(str1) + strlen(str2) + 1);
  if (str3 == NULL) 
    return NULL;
  while(*str1){
    str3[i++]=*str1++;
  }
  while(*str2){
    str3[i++]=*str2++;
  }
  str3[i]='\0';
  return str3;
}

【讨论】:

  • 当然这是 strcpy / strcat 等会做的,但会更有效。我想这是家庭作业
  • 不是作业问题。我知道我必须使用循环,但由于那个终止字符,我没有尝试过任何工作。谢谢大家!
【解决方案2】:

您循环和复制字符。如果要针对此特定操作进行优化,则在将第一个字符串复制到目标字符串后,请保留目标字符串的结束指针,并使用它开始复制下一个字符串,而不是循环再次查找结尾或将长度添加到目的地的起始指针。

【讨论】:

    猜你喜欢
    • 2012-10-05
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2020-08-19
    • 1970-01-01
    相关资源
    最近更新 更多