#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <Windows.h> #include <string.h> #include <direct.h> #include<malloc.h> int main(int argc, char* argv[]) { char* path; char OpenFile[1000]; int k = 0; path = (char*)malloc(1000); _getcwd(path, 1000); int i; for (i = strlen(argv[1]) - 1; i >= 0; i--) { if (argv[1][i] == '\\' || argv[1][i] == '/') { k++; break; } } strcat(path, "\\AnswerH_5"); if (k == 0) strcat(path, argv[1]); else strcat(path, argv[1] + i); for (i = strlen(path) - 1;i >= 0;i--) { if (path[i] == '.') { path[i] = 0; break; } } strcat(path, "H.html"); int w_num, ch_num, num_num, bl_num, let_num, o_num; FILE* txt_fp; if ((txt_fp = fopen(argv[1], "r")) == NULL) exit(0); fscanf(txt_fp, "The number of words:%d\n", &w_num); fscanf(txt_fp, "The number of characters:%d\n", &ch_num); fscanf(txt_fp, "The number of numbers:%d\n", &num_num); fscanf(txt_fp, "The number of blanks:%d\n", &bl_num); fscanf(txt_fp, "The number of letters:%d\n", &let_num); fscanf(txt_fp, "The number of others:%d\n", &o_num); fclose(txt_fp); //扫描txt文件 FILE* html_fp; if ((html_fp = fopen(path, "w+")) == NULL) exit(0); fprintf(html_fp, "The number of words:%d\n", w_num); fprintf(html_fp, "The number of characters:%d\n", ch_num); fprintf(html_fp, "The number of numbers:%d\n", num_num); fprintf(html_fp, "The number of blanks:%d\n", bl_num); fprintf(html_fp, "The number of letters:%d\n", let_num); fprintf(html_fp, "The number of others:%d\n", o_num); fclose(html_fp); //编写html文件 if (strcmp(argv[2], "auto") == 0) { strcpy(OpenFile, "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE "); strcat(OpenFile, path); WinExec(OpenFile, SW_SHOWMAXIMIZED); //ShellExecute(0,"open",path, 0,0,1);// } if (strcmp(argv[2], "quiet") == 0) { printf("已生成html文件,文件路径为:%s", path); } }
时间: 2024-04-23 07:21:46 浏览: 86
这段代码是一个文件读取程序,它可以读取一个文本文件,并将文件中的单词数、字符数、数字数、空格数、字母数和其他字符数统计出来,然后将这些统计结果写入一个 HTML 文件中。代码使用了命令行参数,第一个参数是要读取的文本文件的路径,第二个参数是程序运行方式,可以是 "auto" 或 "quiet"。如果是 "auto",程序会在生成 HTML 文件后自动打开它;如果是 "quiet",程序只会输出生成的 HTML 文件路径,不会打开文件。
具体实现过程是先使用 _getcwd 函数获取程序运行时所在的目录,然后根据命令行参数中指定的文件路径来拼接出 HTML 文件的路径。接着使用 fopen 函数打开文本文件,使用 fscanf 函数读取文件中的统计数据。然后使用 fprintf 函数将统计数据写入 HTML 文件中。最后根据命令行参数中指定的程序运行方式来打开 HTML 文件或者输出文件路径。
需要注意的是,这段代码使用了动态内存分配函数 malloc,因此需要在程序结束时使用 free 函数释放分配的内存,否则会导致内存泄漏。
相关问题
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h>
这段代码是C语言中常用的头文件和预处理指令,主要作用如下:
1. `_CRT_SECURE_NO_WARNINGS`:这是一个编译器预处理指令,用于禁止编译器产生某些警告信息。在C语言中,使用一些不安全的函数(如`strcpy`、`scanf`等)可能会导致安全问题,编译器会产生警告信息。使用该指令可以取消这些警告,但也可能会带来一定的安全隐患,因此需要慎重使用。
2. `stdio.h`:这是C语言中标准输入输出头文件,包含了一些常用的输入输出函数(如`printf`、`scanf`、`fopen`、`fclose`等)的声明和定义。
3. `stdlib.h`:这是C语言中标准库头文件,包含了一些常用的函数(如`malloc`、`free`、`atoi`、`exit`等)的声明和定义。
4. `string.h`:这是C语言中字符串操作头文件,包含了一些常用的字符串操作函数(如`strcpy`、`strcat`、`strlen`、`strcmp`等)的声明和定义。
综上,这段代码主要是为了使用标准输入输出函数、标准库函数和字符串操作函数,并取消编译器产生某些警告信息。
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h>
`#define _CRT_SECURE_NO_WARNINGS` 是一个预处理指令,用于禁用编译器对不安全函数的警告。在C/C++中,有一些函数被认为是不安全的,因为它们可能导致缓冲区溢出或其他安全问题。例如,`strcpy`、`scanf`等函数。当你使用这些函数时,编译器会发出警告,提醒你可能存在安全隐患。
通过在代码的开头添加 `#define _CRT_SECURE_NO_WARNINGS`,你可以告诉编译器不要发出这些警告。这在一些旧的代码或者特定的开发环境中可能会用到。
需要注意的是,禁用编译器警告可能会增加代码的风险,因此在使用这个预处理指令之前,最好先确保你的代码是安全的,并且了解禁用警告可能带来的潜在问题。
阅读全文