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 跳过字符数组的第一个字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言截取字符串的第一个字符

C语言截取字符串的第一个字符

C语言 输入一个字符串 去掉重复的字符,输出无重复的

将字符串的第一个字符转换为大写[重复]

为啥在加载到 XMLTABLE 时会跳过 XML 文档的第 40,000 个字符?

c语言:fscanf(fp,"%*[^\n]")为啥可以跳过全部字符直到下一个换行符