scanf和printf不能正确打印值

问题描述 投票:1回答:2

这里发生了什么?代码如下:

#include<stdio.h>
#include<string.h>

int main()
{
    char name[15];
    char name_[15];
    char answ[1];

    printf("What's your name?\n");
    scanf("%s", name);

    strcpy(name_, name);

    printf("Yes / No: ");
    scanf("%s", answ);

    printf("Hello! %s\n", name_);
    printf("You said: %s\n", answ);

    return 0;
}

[输入为“ name”和“ yes”,预期的输出是:

你好!名称

您说:是

相反,我得到:

你好! ES

您说:是

我也尝试在%s之前添加空格,但没有结果。

那么我到底在这里想念什么?

c string printf scanf stdio
2个回答
0
投票

您只为一个字符的是/否答案分配了空间,但正在向其中写入更多字符。

此结果为undefined behaviour

您需要为answ分配更多的空间,不要忘记NUL终止符。


0
投票

answ只能包含1个字符。因此,当前,多余的字符“ es” +换行符被写入分配给name_的内存中。因此,“ es”被打印出来。

© www.soinside.com 2019 - 2024. All rights reserved.