scanf的不同行为

San*_*pho 0 c input scanf

之间有什么区别吗?

scanf("%s", c);
Run Code Online (Sandbox Code Playgroud)

scanf(" %s", c);
Run Code Online (Sandbox Code Playgroud)

它可以以任何方式影响我的程序吗?提前致谢.

chq*_*lie 8

scanf %s转换指定跳过前导空白字符并解析一个字最多不包括后续的空格.

在前面添加一个空格%s没有任何效果,它是完全冗余的.

这同样适用于%d%f,但不会%c还是%[.

另请注意,%s%[说明符存在风险,因为您没有scanf对要存储到目标中的字符数提供任何限制.这可能没问题,sscanf()因为转换是由源字符串的内容隐式限制的,但必须避免scanffscanf.

您可以在空终止符之前提供%s存储的最大字符数之间的数字参数:

    char buffer[100];
    if (scanf("%99s", buffer) == 1) {
        /* a word was parsed correctly into buffer */
    }
Run Code Online (Sandbox Code Playgroud)