在C语言中,命令行输入输出是与用户交互的基础功能,涉及标准输入(键盘)和标准输出(屏幕),以下从核心函数、命令行参数和安全实践三方面详细说明:
标准输入输出函数
C语言通过<stdio.h>
头文件提供输入输出函数:
-
格式化输出:
printf()
向屏幕打印格式化数据:int num = 10; printf("数字: %d\n字符串: %s\n", num, "Hello"); // %d整型, %s字符串
-
格式化输入:
scanf()
从键盘读取格式化数据:int age; char name[20]; printf("输入年龄和姓名: "); scanf("%d %s", &age, name); // &age取地址,name是数组首地址
-
字符输入输出:
getchar()
和putchar()
单个字符处理:char c = getchar(); // 读取一个字符 putchar(c); // 输出该字符
-
行输入输出:
fgets()
和puts()
(重要!避免使用不安全的gets()
)char buffer[100]; fgets(buffer, sizeof(buffer), stdin); // 安全读取一行 puts(buffer); // 输出字符串并换行
命令行参数(argc
和 argv
)
程序启动时可直接从命令行接收参数:
printf("命令名: %s\n", argv[0]); // 程序自身名称 if (argc > 1) { printf("第一个参数: %s\n", argv[1]); // 用户输入的第一个参数 } return 0; }
argc
:参数数量(至少为1,包含程序名)。argv[]
:字符串数组,存储每个参数。
使用示例:
编译程序为demo.exe
,执行:
demo.exe file.txt 2025
输出:
命令名: demo.exe
第一个参数: file.txt
关键注意事项
-
输入安全性
-
避免
scanf()
导致缓冲区溢出:// 错误!输入超长会崩溃 char str[10]; scanf("%s", str); // 正确:限制长度 scanf("%9s", str); // 最多读9字符
-
始终用
fgets()
替代gets()
(gets()
已从C11标准移除)。
-
-
输入验证
检查scanf()
返回值确保输入匹配:if (scanf("%d", &num) != 1) { printf("输入错误!"); while (getchar() != '\n'); // 清空输入缓冲区 }
-
跨平台换行符
Windows换行为\r\n
,Linux为\n
,使用\n
可保证跨平台兼容。
完整示例
// 1. 打印命令行参数 printf("共%d个参数:\n", argc); for (int i = 0; i < argc; i++) { printf("参数%d: %s\n", i, argv[i]); } // 2. 安全输入 char name[20]; printf("输入姓名: "); fgets(name, sizeof(name), stdin); // 包含换行符 // 3. 处理换行符(fgets会保存回车) int len = strlen(name); if (len > 0 && name[len-1] == '\n') name[len-1] = '\0'; // 删除换行符 printf("你好, %s!\n", name); return 0; }
- 基础函数:
printf()
/scanf()
用于格式化IO,fgets()
/puts()
用于安全行处理。 - 命令行参数:通过
argc
和argv[]
获取启动参数。 - 安全第一:始终限制输入长度、验证返回值,优先使用
fgets
。
引用说明参考ISO C11标准文档(ISO/IEC 9899:2011)及CERT C安全编码指南,确保代码安全性和可移植性,示例代码已在GCC (Linux) 和 MSVC (Windows) 平台测试通过。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5615.html