ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C输入输出函数详解:Coursebook printf/scanf完整参考

C输入输出函数详解:Coursebook printf/scanf完整参考 C输入输出函数详解Coursebook printf/scanf完整参考【免费下载链接】coursebookOpen Source Introductory Systems Programming Textbook for the University of Illinois项目地址: https://gitcode.com/GitHub_Trending/co/coursebookCoursebook 是伊利诺伊大学开源的系统编程入门教材其C 语言一章用精炼的篇幅讲透了 C 输入输出的核心三大标准流、printf格式占位符、缓冲机制以及scanf家族的安全用法。本文基于教材原文为你整理一份面向新手的 C 输入输出函数完整参考帮你一次搞懂printf/scanf背后的原理与常见坑点。三大标准流stdin、stdout 与 stderr每个 C 程序启动时都自带三条数据流由文件描述符 0、1、2 标识流描述符用途默认缓冲行为stdin标准输入0接收程序输入通常来自终端重定向到文件时全缓冲终端下行缓冲stdout标准输出1输出程序结果printf默认写到它同上stderr标准错误2输出错误与调试信息不缓冲立即写出教材特别强调stderr按惯例是不缓冲的而stdin/stdout只有在目标不是交互终端比如重定向到文件时才全缓冲。这解释了为什么printf写到终端时看到换行就立刻出现写到文件时却憋到最后才出现。三条流都可以用 shell 重定向指向文件或别的程序形成管道。下图展示了多个进程通过标准输出/输入串联成管道的典型场景 这也正是 Unix 哲学每个程序只做一件事通过标准流组合的体现。printf 格式字符串与常用占位符printf的第一个参数是格式字符串其中的占位符决定后续参数如何被格式化输出占位符作用%s按 C 字符串打印直到遇到 NUL 字符%d按十进制整数打印%c打印单个字符%p打印指针的内存地址%f/%x打印浮点数 / 十六进制一个典型的用法来自教材示例printf(Hello %s, your result is %d\n, name, score);注意%s需要字符串指针而打印整数变量的地址时必须写score——这是新手最常犯的错之一。教材原文见 common_c_functions.tex。只打印一行文字或单个字符时还有更轻量的puts(...)和putchar(1)。缓冲机制printf 什么时候真正写出去printf并不直接写系统它先把数据放进缓冲区再调用系统调用write真正落盘。ISO 标准定义了三种流类型不缓冲内容尽快到达目的地stderr通常如此行缓冲遇到换行符就写出连终端的stdout通常如此全缓冲缓冲区写满才写出重定向到文件时如果等不及自动刷新可以显式调用fflush()强制把缓冲区内容写出去。理解这一点你排查输出为什么没出现在日志文件里这类问题时就有的放矢了。其他输出函数fprintf 与 sprintf 家族fprintf(stderr, ...)把格式化输出写到任意FILE*流预定义的stdout/stderr或fopen返回的文件流dprintf(fd, ...)直接对文件描述符做格式化输出格式化到字符串教材给出了一个安全优先级排序 函数安全性说明sprintf⚠️ 不检查边界仅在输出长度可确定时使用snprintf✅ 永不越界传入缓冲区大小超长会截断asprintf✅✅ 最佳堆上自动分配恰好够大的缓冲区用完记得freesnprintf的返回值值得记住它返回本应写入的字符数如果返回值 ≥ 缓冲区大小说明输出被截断了。scanf 家族安全用法与避坑指南读取输入时教材的核心建议是检查返回的解析数量是否等于期望值。scanf/fscanf/sscanf都会返回成功解析的项数从默认输入流、任意文件流或 C 字符串中读取。三个必记的安全要点gets已被淘汰无法限制读取长度极易缓冲区溢出C11 标准直接移除。请改用fgets(buffer, sizeof(buffer), stdin)或能自动扩容的getline。用宽度限定符防溢出scanf(%9s, buffer)最多读 9 个字符给 10 字节的缓冲区留一个字节放结尾 NUL。别把指针本身当数据sscanf(line, %c %d, type, data)中data是int*传data会改写指针本身后续free(data)直接崩溃。性能方面scanf家族因要兼容所有printf规格符而开销较大追求极致性能的程序可以手写解析。详见教材 introc.tex 引用的完整章节。项目内延伸阅读资源想深入 C 输入输出这些仓库文件值得收藏函数详解原文introc/common_c_functions.tex —— 覆盖错误处理、I/O、string.h全家桶章末练习含 stdout/stderr 交错输出思考题introc/introc.tex全书章节顺序order.yaml构建与部署脚本Makefile、_scripts/ 教材还给了一个实用技巧用man -S3 printf查阅 C 库函数的 man 手册第 3 节是 C 库第 2 节是系统调用比翻书更快。【免费下载链接】coursebookOpen Source Introductory Systems Programming Textbook for the University of Illinois项目地址: https://gitcode.com/GitHub_Trending/co/coursebook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表