C 连接字符串额外空格

标签 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];
}

我不明白我错过了什么。除了最后一个字符之外,连接有效,我总是得到一个额外的 space

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

最佳答案

您无法终止输出,您从未在末尾写入'\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'

正如预期的那样。

关于C 连接字符串额外空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47834193/

相关文章:

java - 我可以用这个引用作为 Java 中的参数更改一个方法中的引用吗?

c - UNIX 域套接字导致输出延迟

c - 如何在 Windows 7 上使用 GCC 和 NVIDIA Toolkit 编译和链接 OpenCL?

python - 如何计算数据框中所有等于条件的选定单词?

string - 是否存在unicode "New-Line"(换行符),就像unicode `space`( )一样?

C#:用于解码 Quoted-Printable 编码的类?

java - 为什么 Java 不在 javadoc 中包含每个函数的时间/空间复杂度?

c - 使用MPI的不同大小的散布矩阵 block

c++ - 如何在编译失败时找到缺失的依赖?

在 C 中检查自己的 pow 函数的限制?