首页 > 解决方案 > 是 scanf("%4s%4s", b, b); 定义明确?

问题描述

#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吗?

标签: carraysscanf

解决方案


这个scanf参考

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

因此,您正在做的事情已定义并且应该可以正常工作。


推荐阅读