C连接字符串额外空格

时间:2017-12-15 14:18:28

标签: c string

我创建了一个与strcat基本相同的函数。

void Mystrcat(char* s, char* t)
{
    int j, i=0;
    for ( j = 0; s[j] != '\0'; j++);

    for (i = 0; t[i] != '\0'; i++, j++)
        s[j] = t[i];
}

我无法理解我错过了什么。连接工作除了在最后一个charcarter中,我总是得到额外的space

Input: s = "My        " t="House" , output = "My House "

1 个答案:

答案 0 :(得分:4)

您无法终止输出,您最后不会写'\0'。您可以将第二个循环改为经典复制循环:

while (s[j++] = t[i++])
  ;

这将在复制终结符后停止

您的代码可能具有未定义的行为,恰好表现为额外的空间。

此外,如果您的输入确实是"My ""House",那么正确的输出当然应该是

"My        House"

保留输入末尾的所有空格。

正如评论中指出的那样,您无法修改字符串文字,当然您需要分配空间。

这样的事情:

int main(void)
{
  char s[100] = "My        ", *t = "House";
  Mystrcat(s, t);
  printf("Got '%s'\n", s);
  return 0;
}

打印:

Got 'My        House'

正如所料。