scanf 中的分配抑制和字段宽度

assignment supression and field width in scanf

在 printf 中,字段宽度可以指定为“*”

printf("%*s", 99, str);

如何在 scanf 中执行相同操作而不将其解释为赋值抑制字符?

示例 1:

char str[100];
scanf("%**s %s", 10, str);

第一个星号应该解释为赋值抑制,第二个星号应该解释为字段宽度,因此上面的scanf应该读取并忽略10个字符,然后读取下一个字符串并将其存储在str.

示例 2:

char str[100];
scanf("%*s", 10, str);

第一个星号应该被解释为字段宽度,所以上面的scanf应该读取10个字符并将它们存储在str

你不能这样做。 scanf 的工作方式与 printf 不同。具体来说:

  • 格式字符串中的星号始终表示 'suppress the assignment'

  • 字段宽度必须以文字形式出现在格式字符串中;它们不能作为 scanf

    的参数出现

完整文档here