fprintf和fprintf_s
时间: 2024-03-19 07:39:10 浏览: 219
fprintf和fprintf_s都是C语言中的输出函数,用于将格式化的数据写入到文件中。
1. fprintf函数:
- 函数原型:int fprintf(FILE *stream, const char *format, ...)
- 参数:
- stream:指向要写入的文件的指针
- format:格式化字符串,指定输出的格式
- ...:可变参数列表,根据format中的格式化指示符进行填充
- 返回值:成功写入的字符数,如果发生错误则返回负值
2. fprintf_s函数:
- 函数原型:int fprintf_s(FILE *stream, const char *format, ...)
- 参数:
- stream:指向要写入的文件的指针
- format:格式化字符串,指定输出的格式
- ...:可变参数列表,根据format中的格式化指示符进行填充
- 返回值:成功写入的字符数,如果发生错误则返回负值
这两个函数的功能基本相同,都是将格式化的数据写入到文件中。不同之处在于fprintf_s函数在编译时会进行安全检查,以防止缓冲区溢出。因此,如果在使用fprintf_s函数时发生了缓冲区溢出,程序会终止并显示错误信息。
相关问题
void exampaper(const char* choice_question_file) { //问卷的生成 FILE* choice_fp = fopen(choice_question_file, "r"); if (choice_fp == NULL) { printf("无法打开题文件\n"); return; } FILE* exam_paper_fp = fopen("D:\VS\校友系统\sj.txt", "w"); if (exam_paper_fp == NULL) { printf("无法打开试卷文件\n"); return; } int choice_question_count = get_question_count(choice_question_file); int choice_question_numbers[MAX_QUESTION_LEN] = { 0 }; int choice_question_number; int number = 1; int count = 0; // 已经抽取到的题目数 while (count < get_question_count(choice_question_file)) { choice_question_number = get_next_value(1, choice_question_count); if (choice_question_numbers[choice_question_number - 1] == 0) { choice_question_numbers[choice_question_number - 1] = 1; fseek(choice_fp, 0, SEEK_SET); int curr_choice_question_number; char question[MAX_QUESTION_LEN]; char option_a[MAX_OPTION_LEN]; char option_b[MAX_OPTION_LEN]; char option_c[MAX_OPTION_LEN]; char option_d[MAX_OPTION_LEN]; while (fscanf(choice_fp, "%d %s %s %s %s %s ", &curr_choice_question_number, question,option_a, option_b, option_c, option_d) != EOF) { if (curr_choice_question_number == choice_question_number) { // 找到题目,打印到调查问卷文件中 fprintf(exam_paper_fp, "%d.", number++); fprintf(exam_paper_fp, "%s", question); fprintf(exam_paper_fp, " A.%s", option_a); fprintf(exam_paper_fp, " B.%s", option_b); fprintf(exam_paper_fp, " C.%s", option_c); fprintf(exam_paper_fp, " D.%s\n", option_d); break; } } count++; } } fprintf(exam_paper_fp, "\n"); // 关闭文件 fclose(choice_fp); fclose(exam_paper_fp); }
这段代码是一个生成试卷的函数,函数名为 exampaper,接受一个字符串参数 choice_question_file,表示选择题题目文件的路径。
函数首先打开选择题文件,如果无法打开则输出错误信息并返回。然后打开试卷文件 sj.txt,如果无法打开则输出错误信息并返回。
接下来,函数获取选择题文件中的题目数量,创建一个数组 choice_question_numbers 来记录已经选取的题目,初始化为0。变量 number 记录试卷中题目的编号,变量 count 记录已经选取的题目数量。
在 while 循环中,函数获取下一个随机数 choice_question_number,如果这个数对应的题目还没有被选取,则将其标记为已选,并将文件指针移回选择题文件的开头。然后在选择题文件中查找对应的题目,找到后将其打印到试卷文件中,同时更新 number 和 count 变量。
循环结束后,函数在试卷文件中输出一个空行,并关闭选择题文件和试卷文件。
// print information fprintf( stdout, "\n" ); fprintf( stdout, "HM software: Encoder Version [%s] (including RExt)", NV_VERSION ); fprintf( stdout, NVM_ONOS ); fprintf( stdout, NVM_COMPILEDBY ); fprintf( stdout, NVM_BITS ); fprintf( stdout, "\n\n" );
这段代码是用于打印一些信息到标准输出(stdout)。下面是对每行代码的简单解释:
- `fprintf( stdout, "\n" );`:打印一个换行符,相当于输出一个空行。
- `fprintf( stdout, "HM software: Encoder Version [%s] (including RExt)", NV_VERSION );`:打印一个带有变量NV_VERSION的字符串,用于表示HM软件的版本信息。
- `fprintf( stdout, NVM_ONOS );`:打印一个宏定义NVM_ONOS所表示的字符串。
- `fprintf( stdout, NVM_COMPILEDBY );`:打印一个宏定义NVM_COMPILEDBY所表示的字符串。
- `fprintf( stdout, NVM_BITS );`:打印一个宏定义NVM_BITS所表示的字符串。
- `fprintf( stdout, "\n\n" );`:打印两个换行符,相当于输出两个空行。
这段代码通过使用fprintf函数将指定的信息打印到标准输出。其中,stdout表示标准输出流。具体的输出内容和格式取决于宏定义和变量NV_VERSION、NVM_ONOS、NVM_COMPILEDBY和NVM_BITS的值。
阅读全文