C strcpy复制字符串并添加另一个字符

C strcpy复制字符串并添加另一个字符,c,C,我被指派用我的名字演示我自己制作的strcpy函数。我使用的是代码块,我遇到的问题是,对于我输入的一些字符的随机组合,它大部分时间都会复制和打印相同的字符。但是,例如,如果我输入我的姓名Mark,打印的语句将显示string1=Mark(我的输入),对于string2,它将打印utring2=MarkH▀。直到现在我才意识到它是在打印utring2而不是string2,所以现在我也在想这个问题 #include <stdio.h> char* mystrcpy(char* s1, c

我被指派用我的名字演示我自己制作的strcpy函数。我使用的是代码块,我遇到的问题是,对于我输入的一些字符的随机组合,它大部分时间都会复制和打印相同的字符。但是,例如,如果我输入我的姓名Mark,打印的语句将显示string1=Mark(我的输入),对于string2,它将打印utring2=MarkH▀。直到现在我才意识到它是在打印utring2而不是string2,所以现在我也在想这个问题

#include <stdio.h>
char* mystrcpy(char* s1, char* s2);

main()
{
    char string1[100], string2[100];    //declaring two strings with buffer sizes of 100
    gets(string1);                  //takes input from user for string1
    mystrcpy(string2, string1);     //calls string copy function
    printf("string1 = ");
    puts(string1);          //prints string1
    printf("string2 = ");
    puts(string2);          //prints new string2 which should be the same as string1
    return 0;           //ends main program
}

char* mystrcpy(char* s1, char* s2)
{
    int i=0;    //initializes element counter at 0 for first element
    while(s2[i] != '\0')    //loops until null is reached
    {
        s1[i] = s2[i];      //copies the i-th element of string1 to the corresponding element of string2
        i++;            //increments element counter
    }
    return s1;
}

您也需要复制0,在返回之前执行
s1[i]=0

还是去做

    int i=0;    //initializes element counter at 0 for first element
    do
    {
        s1[i] = s2[i];      //copies the i-th element of string1 to the corresponding element of string2
        i++;            //increments element counter
    } while(s2[i] != '\0')    //loops until null is reached
    return s1;

当测试
s2[i]!='\0'
失败您没有进入循环,这意味着您忽略字符串终止符
'\0'


因此,您需要在循环后执行
s1[i]='\0'
,以确保字符串
s1
的终止。然后您可以返回复制的字符串。

啊,这个解释很清楚。我没意识到我也要复制它。第一次用字符串。非常感谢。
    int i=0;    //initializes element counter at 0 for first element
    do
    {
        s1[i] = s2[i];      //copies the i-th element of string1 to the corresponding element of string2
        i++;            //increments element counter
    } while(s2[i] != '\0')    //loops until null is reached
    return s1;