GESP 四级 · GESP 202603 C++ 四级 第 13 题

选择题 · 答案 B · 考点:函数

← 整套速查表 GESP 四级 全部真题

题目

下面哪种方式不能实现将字符串 Welcome to 2026! 输出重定向到文件 log.txt( )。

A.

freopen("log.txt", "w", stdout);
cout << "Welcome to 2026!" << endl;
fclose(stdout);

B.

std::ofstream outFile("log.txt");
cout << "Welcome to 2026!" << endl;
outFile.close();

C.

ofstream log_file("log.txt");
streambuf* org_cout = cout.rdbuf();
cout.rdbuf(log_file.rdbuf());
cout << "Welcome to 2026!" << endl;
cout.rdbuf(org_cout);

D.

std::ofstream outFile("log.txt");
outFile << "Welcome to 2026!" << endl;
outFile.close();
答案:B

考点

函数

解题思维

答案B。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。

常见错误

指针和数组追踪时画内存布局图可以大大简化理解。

详细解析(节选)

【考点】文件 I/O 重定向|freopen 函数|rdbuf 流缓冲区操作。命题人想卡住"认为打开文件就能重定向 cout"的直觉错误。

解题时先判断输出流去向:freopen 重定向 stdout 到文件,cout 默认输出到 stdout,故 A 有效;C 通过 rdbuf 交换 cout 与文件流缓冲区,输出写入 log.txt,C 有效;D 直接用 ofstream 对象写入文件,D 有效;B 仅定义 outFile 却未将 cout.rdbuf 指向它,cout 仍走控制台,B 无效。

陷阱核心在 B:看似"打开文件"就完成重定向,实则 cout 与 outFile 完全隔离,属于"动作与目标脱节"的语义陷阱;命题人利用"打开文件=重定向"的错觉,B 选项看似操作了文件却未关联 cout,是"动作与目标脱节"的典型陷阱。C 选项 rdbuf 虽涉及指针操作,但题目不考恢复原状,只问能否重定向,故 C 有效。若题目要求"重定向后恢复 cout",则 C 需额外一步,但本题未涉及。

若改题问"哪种方式不依赖 cout 重定向",则 D 为答案;若问"哪种方式不修改 stdout",则 C 为答案;若问"哪种方式不输出到控制台",则 B 为答案。刷到类似题先问"命题人想考我什么"。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断