是scanf(“%4s%4s”,b,b);定义明确?

问题描述 投票:0回答:1
#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个回答
0
投票

来自this scanf reference

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

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

© www.soinside.com 2019 - 2024. All rights reserved.