C scanf 奇怪的行为

扬·洛夫欣

我在给定的代码中遇到了一个问题,即输入(2 X++ X++)会产生输出(2 0),或者任何输入都会产生(n 0)而不是(n n). 谁能解释这种行为的原因?

#include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);
    int number = 0;
    for (int i = 0; i < n; i++)
    {
        char operation[3];
        printf("%d\n", n);
        scanf("%s", operation);
        printf("%d\n", n);
        if (operation[0] == '+' || operation[2] == '+')
            number++;
        else
            number--;
    }

    return 0;
}
乔莱特

operation定义为 3 个字符长 - 即两个“数据”字符加上空终止符您将一个长度为三个“数据”字符的字符串读入其中,但您忘记了空终止符。

也就是说,你的记忆可能是这样的:

+---+---+---+---+
|   |   |   | 2 |
+---+---+---+---+
<-operation-> n

然后你用它的空终止符读入“X++”,你的记忆读到:

+---+---+---+---+
| X | + | + | \0|
+---+---+---+---+
<-operation-> n

最后'\0'需要在分配的空间中考虑operation

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章