如何从指定文件中移除#注释及:once:标记并逐行输出内容?
完善C代码实现移除
:once:标记和注释 我来帮你搞定这段代码,实现移除每行的:once:前缀和#后的注释功能。咱们一步步拆解修改:
先明确核心需求:
- 去掉每行开头的
:once:标记 - 删除
#及其后面的所有注释内容 - 保留有效内容并正常逐行打印
完善后的完整代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv) { // 检查命令行参数是否正确传入文件名 if (argc != 2) { fprintf(stderr, "用法:%s <文件名>\n", argv[0]); return EXIT_FAILURE; } FILE *file = fopen(argv[1], "r"); // 处理文件打开失败的情况 if (!file) { perror("打开文件失败"); return EXIT_FAILURE; } char buf[100]; char *p; while (fgets(buf, sizeof(buf), file)) { // 第一步:移除`:once:`标记 p = strstr(buf, ":once:"); if (p) { // 将`:once:`后面的内容移到字符串开头 memmove(buf, p + 6, strlen(p + 6) + 1); } // 第二步:移除#注释 p = strchr(buf, '#'); if (p) { *p = '\0'; // 截断字符串,丢弃注释部分 } // 打印处理后的内容(fgets已包含换行符,无需额外加\n) printf("%s", buf); } fclose(file); return EXIT_SUCCESS; }
关键修改说明:
- 参数与文件校验:增加了命令行参数检查和文件打开失败的错误处理,避免程序因非法输入崩溃
:once:标记处理:用strstr定位标记位置,再通过memmove把标记后的内容移到字符串开头,确保有效内容保留- 注释处理优化:原代码的
char p;类型错误,改成char *p;才符合strchr的返回值类型 - 打印逻辑调整:原代码的
printf("%s\n", buf)会导致重复换行(fgets已读取每行的换行符),改成printf("%s", buf)更合理
测试效果:
输入行:once:echo Hello # this is a comment处理后输出echo Hello ;输入行:once:echo 3处理后输出echo 3,完全符合需求。
内容的提问来源于stack exchange,提问作者e t
相关产品推荐
相关产品推荐

