C++ printf跳过字符数组的第一个字符

C++ printf跳过字符数组的第一个字符,c++,c,arrays,string,character,C++,C,Arrays,String,Character,在下面给出的代码中,我试图在while循环中使用scanf获取字符串输入。当我打印该字符串时,打印时没有第一个字符。但当我将它复制到另一个字符串并打印新字符串时,它会正确打印 在我的代码中,如果我将“abc”作为输入并打印两个字符串,那么将打印“bc abc”,而不是“abc abc” 这是什么原因?我的代码有问题吗 int main() { char st1[10],st2[]=""; while(scanf("%s",st1)==1){ strcpy(st2,

在下面给出的代码中,我试图在while循环中使用scanf获取字符串输入。当我打印该字符串时,打印时没有第一个字符。但当我将它复制到另一个字符串并打印新字符串时,它会正确打印

在我的代码中,如果我将“abc”作为输入并打印两个字符串,那么将打印“bc abc”,而不是“abc abc”

这是什么原因?我的代码有问题吗

int main()
{
    char st1[10],st2[]="";
    while(scanf("%s",st1)==1){
        strcpy(st2,st1);
        printf("%s %s\n",st1,st2);
        strcpy(st2,"");
    }
    return 0;
}
char st1[10],st2[]=”
st1
保留10个字节,为
st2
保留1个字节

然后您尝试将st1的内容复制到st2

删除此项,因为它不是必需的:

strcpy(st2,"");
更改此项:

char st1[10],st2[10];

现在两个变量都有了内存,可以在两个变量之间复制数据。在第一个例子中,你没有足够的内存来存储代码< ST2< /COD>变量,行为一般是未定义的。

提示:<代码> ST2[]=“/Case>可能是没有意义的。是C还是C++?OHH!你能解释一下为什么在使用“st2[10]”之后它就可以工作吗@SouravGhoshit是C++tilz0R@SadmanRizwan更新答案。