C标准中何处规定fscanf的%n对应参数需为int指针?
关于fscanf中%n转换符无长度修饰符时的参数类型规定
在C23标准草案n3220的7.23.6.2 格式化输入函数的转换规范章节中,你提到的p12条款仅明确%n的参数需为有符号整数类型指针,但具体的类型匹配规则需要结合该章节的转换规范与长度修饰符对应关系确认:
- 该章节的转换规范对应表格明确规定:当
%n未指定任何长度修饰符时,对应的参数必须是指向int类型的指针。只有搭配对应长度修饰符时,才需要匹配其他有符号整数类型指针:- 比如
%lln(搭配ll长度修饰符)对应long long int*,%ln(搭配l长度修饰符)对应long int*。
- 比如
你测试中使用long long int*配合无修饰符的%n出现异常,本质是违反了标准的类型匹配要求,这种情况属于未定义行为,编译器和运行时没有义务保证结果正确。标准示例采用int*,正是严格遵循了无修饰符%n的默认类型规定。
内容的提问来源于stack exchange,提问作者timmy george
相关产品推荐
相关产品推荐

