【问题标题】:Is scanf("%4s%4s", b, b); well-defined? [duplicate]是 scanf("%4s%4s", b, b);定义明确? [复制]
【发布时间】:2020-08-22 07:31:34
【问题描述】:
#include <stdio.h>

int main(void) 
{
    char b[5];
    scanf("%4s%4s", b, b);
    //My input: "qwer<Enter>sgsh<Enter>"
    printf("%s", b);
    //Output: sgsh
}

C99: 在上一个序列点和下一个序列点之间,一个对象应该有它的存储值 通过表达式的评估最多修改一次。

在这种情况下,我正在修改b twice 的值。不是undefined behavior吗?

【问题讨论】:

    标签: c arrays scanf


    【解决方案1】:

    来自this scanf reference

    每个转换说明符的动作之后都有一个序列点;这允许在同一个“接收器”变量中存储多个字段。

    所以你正在做的事情已经定义好了,应该可以很好地工作。

    【讨论】:

      猜你喜欢
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多