如何在C中连接两个字符串?

时间:2018-03-04 03:15:10

标签: c

我已经编写了这段代码,但它没有用。它最终会显示一些额外的字符。这是代码:

// Program to concate/join two string
#include<stdio.h>
#include<string.h>
main()
{
    int i,j,n=0;
    char str[100],str2[100],str3[100];
    printf("Enter string 1:\n");
    gets(str);
    printf("Enter string 2:\n");
    gets(str2);
    for(i=0;str[i]!='\0';i++)
    {
        str3[i]=str[i];
        n=n+1;
    }
    for(i=0,j=n;str2[i]!='\0';i++,j++)
    {
        str3[j]=str2[i];
    }
    printf("The concanted sring is: \n");
    puts(str3);
}

Here's the output

3 个答案:

答案 0 :(得分:1)

在C语言中,字符串是以空字符结尾的字符数组。

  

最后会显示一些额外的字符。

原因是,在将str3连接到字符串str2后,您不会在字符串str3[j] = '\0'; 的末尾添加空字符。在连接字符串的末尾添加一个空字符,如下所示:

fgets()

此外,您应 not use gets() 。它已经过时了。相反,请使用int

附加:
遵循良好的编程习惯,养成将main指定为{{1}}函数的返回类型的习惯。

答案 1 :(得分:1)

完成复制循环后,使用jekyll-remote-theme终止str3字符串:

'\0'

否则for(i=0,j=n;str2[i]!='\0';i++,j++) { str3[j]=str2[i]; } str3[j] = '\0'; // proper termination of the `str3`. 将继续,直到遇到内存中的第一个随机str3为止。这就是您在打印'\0'时获得额外字符的原因。

另请阅读:gets() function in C

Why is the gets function so dangerous that it should not be used?

在程序中避免使用str3

答案 2 :(得分:0)

您可以使用最佳字符串操作函数“strcat()”之一轻松地连接到字符串。尝试使用以下解决方案:

#include <stdio.h>
#include <string.h>
int main()
{
    char str1[] = "Hello" , str2[] = "There";

    //concatenates str1 and str2 and resultant string is stored in str1.

    strcat(str1,str2);

    puts(str1);    
    puts(str2); 

    return 0;
}

输出: HelloThere