Tag: 符合性

解析数字时scanf()和strtol()/ strtod()之间的区别

注意:我完全重写了这个问题,以更恰当地反映出我为此设置的赏金。 请原谅与已经给出的答案有任何不一致之处。 我不想创建一个新问题,因为之前的答案可能会有所帮助。 我正在努力实现C标准库,并对标准的一个特定角落感到困惑。 该标准根据strtol , strtoul和strtod的定义定义了scanf函数系列接受的数字格式(%d,%i,%u,%o,%x)。 该标准还说fscanf()只会将最多一个字符放回输入流中,因此strtol , strtoul和strtod接受的某些序列对fscanf是不可接受的(ISO / IEC 9899:1999,脚注251)。 我试图找到一些会表现出这种差异的价值观。 事实certificate,hex前缀“0x”,后跟一个不是hex数字的字符,就是两个函数系列不同的情况。 有趣的是,很明显没有两个可用的C库似乎在输出上达成一致。 (请参阅本问题末尾的测试程序和示例输出。) 我想听到的是解析“0xz”时会被视为符合标准的行为? 。 理想情况下引用标准中的相关部分来说明问题。 #include #include #include int main() { int i, count, rc; unsigned u; char * endptr = NULL; char culprit[] = “0xz”; /* File I/O to assert fscanf == sscanf */ FILE * fh = fopen( […]