c - 与c中的scanf语句相关

标签 c scanf

我遇到了以下代码,但我无法理解 scanf 部分。

int main()
{
  int i,j;
  scanf("%d %d"+scanf("%d %d",&i,&j));
  printf("%d %d",i,j);
  return 0;
}

我在输入 4 8 9 上运行代码,它返回 9 8。

有人可以解释一下工作原理吗?

最佳答案

内部 scanf("%d %d",&i,&j) 返回一个计数,例如 2,1、EOF(或者可能是 0)。

将该计数添加到格式字符串“%d %d”,将格式偏移该计数(例如 2),以形成“%d”。这只是指针加法。 @John Bollinger

然后代码执行相当于 scanf("%d"); 的操作,这是未定义的行为 (UB),因为它缺少匹配的 int * 来配合“%d”@mch

Can someone please explain the working?

它不是“工作”,它是 UB。


踩在 thin ice 上的变体。如果第一个 scanf() 返回 2,它将“工作”。然而,这对我来说看起来像是黑客代码。

int main() {
  int i,j;
  scanf("%d %d"+scanf("%d %d",&i,&j), &i);
  printf("%d %d",i,j);
  return 0;
}

关于c - 与c中的scanf语句相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43355450/

相关文章:

c - 在 Linux 上访问 main 之外的主要参数

c++ - 错误 C2196 : case value '?' already used

c - 如何计算数字中的位数,包括前导零?

c - 从标准输出一次扫描两个数字

制作或制作。我需要两者吗?

将主机字符编码中的字符串转换为 C 中的 Unicode

c - 而 scanf!=EOF 或 scanf==1?

c - 使用 DDD(数据显示调试器)时的 SIGSEGV

c - 将一行的前三个字符串读入单独的数组,然后将该行的其余部分读入 C 中的第四个字符串?

c 发送和接收文件