printf 跳过字符数组的第一个字符[重复]
Posted
技术标签:
【中文标题】printf 跳过字符数组的第一个字符[重复]【英文标题】:printf skips first character of character array [duplicate] 【发布时间】:2017-05-10 13:29:07 【问题描述】:在下面给出的代码中,我尝试在 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;
【问题讨论】:
提示:st2[]=""
可能毫无意义。
是 C 还是 C++?
哦!你能解释一下为什么在使用“st2[10]”之后它可以正常工作吗? @SouravGhosh
它是 c++ @tilz0R
@SadmanRizwan 更新了答案。
【参考方案1】:
char st1[10],st2[]="";
为st1
保留10个字节,为st2
保留1个字节。
那么你正在尝试将 st1 的内容复制到 st2。
删除它,因为它不是必需的:
strcpy(st2,"");
改变这个:
char st1[10],st2[10];
现在你有了两个变量的内存,你可以在它们之间复制数据。在第一个示例中,您没有为 st2
变量保留足够的内存,并且行为通常未定义。
【讨论】:
以上是关于printf 跳过字符数组的第一个字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章