__isoc99_sscanf()函数作用是什么?结合C语言代码说明
__isoc99_sscanf 函数功能说明
__isoc99_sscanf 是GCC编译器适配C99标准的sscanf内部实现版本,功能和C标准库定义的sscanf完全一致:从输入的源字符串中按照指定格式规则提取内容,写入对应变量中。
核心参数与返回值规则
- 第一个入参:待解析的源字符串指针,示例代码中传入的是
pmt1 - 第二个入参:格式控制字符串,示例中为
"%d %d",表示需要匹配两个以空白字符分隔的十进制整数 - 后续可变入参:每个格式占位符对应一个变量地址,用来存储解析出来的结果
- 返回值:成功完成赋值的格式占位符数量,若解析出错或提前到达字符串末尾会返回小于占位符总数的值,发生读取错误时返回
EOF
结合示例代码的说明
你提供的代码存在两处严重的参数错误,运行时必然崩溃:
- 第三个入参直接传了未初始化的
elmt1变量值,而非elmt1的地址&elmt1,会导致非法内存访问 - 第四个入参传入的是数组
elmt3的首地址,对应第二个%d占位符,解析到的第二个整数会写入elmt3[0]的位置
如果修复参数错误后,假设pmt1指向字符串"99 1024",执行amt = __isoc99_sscanf(pmt1, "%d %d", &elmt1, &elmt3[0]);后,elmt1的值会被设为99,elmt3[0]的值会被设为1024,返回值amt为2。
内容的提问来源于stack exchange,提问作者adlofMerlin
相关产品推荐
相关产品推荐

