将字符串源复制到目标,然后在C中附加一个字符

c string function loops pointers

312 观看

2回复

53 作者的声誉

将字符串复制到目标位置,在目标位置末尾添加字符C,然后将终止目标位置为null。我们可以假设sizeof(destination)> = strlen(source)+ 2

void strcpyALT(char* dest, char* source, char c)  {
  char* dst = dest;
  char* src = source;
  while(*src) {
      *(dst++) = *(src++);
  }
  dst = dst + 1;
  *dst = c;
  dst = dst + 1;
  *dst = '\0';
}

我是C语言的新手,但有两个问题,假设假设,此代码看起来正确吗?我为自己设置了一些本地测试,但只想确保我没有犯任何我没有捕捉到的明显错误。另外,有没有更干净的方法来写入最后4行?

作者: Kyle 的来源 发布者: 2017 年 9 月 15 日

回应 2


2

55391 作者的声誉

给定假设,此代码似乎正确吗?

没有。

  while(*src) {
      *(dst++) = *(src++);
  }
  dst = dst + 1;
  *dst = c;

在这里,当您退出循环时,dst将已经指向c应该写入的位置(附加到字符串)。完成后dst = dst + 1;,您将保持该位置不变,并写入c到下一个所需位置。

所以丢掉 dst = dst + 1;

(拉伸)如有疑问,请进行更多测试。

另外,有没有更干净的方法来写入最后4行?

还有其他方法(现在写3行),但是我想这很干净。

作者: gsamaras 发布者: 2017 年 9 月 15 日

0

1 作者的声誉

简而言之:删除此行,紧接循环后的一行,“ dst = dst + 1”。休息吧

有没有更干净的方法来写最后4行?

*dest++ = c;   
*dest   = '\0';    //reduced to 2 lines.
作者: Alk 发布者: 2017 年 9 月 15 日
32x32