在C和C++中把标准输出重定向到指定文件
C++的实现
#include<fstream>
#include <iostream>
using namespace std;
int main()
{
ofstream logTest("foo.log");
streambuf *oldbuf = cout.rdbuf(logTest.rdbuf());
cout << "输出到标准输出,但实际输出到了foo.log文件中\n";
logTest << "输出到文件,虽然将cout重定向到了log,但不影响log本身的使用\n";
// 恢复流缓冲区
cout.rdbuf(oldbuf);
cout << "输出到标准输出\n";
getchar();
}
C的实现
#include <ios>
#include <iostream>
#include <fstream>
//若使用包含.h文件方式则编译报错
using namespace std;
void main()
{
ofstream ofs("e:\\a.txt");
streambuf *osb = cout.rdbuf(ofs.rdbuf());
cout << "to file" << endl;
cout.rdbuf(osb);
cout << "to term" << endl;
}
啊,这样对于实现来说可能不是很妥,改成手动刷新缓冲才有应用价值
#include <stdio.h>
#include <string.h>
void main()
{
FILE old_stdout;
FILE *fp = fopen("e:\\a.txt", "w");
memcpy(&old_stdout, &_iob[1], sizeof(FILE));
memcpy(&_iob[1], fp, sizeof(FILE));
/*call any functions..*/
printf("to file");
/**/
/*把缓冲刷新到文件*/
fflush(stdout);
memcpy(&_iob[1], &old_st
相关文档:
发现个全局变量与局部变量的区别:
[code=C/C++]
char** t;
main()
{
char c[1];
char** t1;
sprintf(c,"%d",t);
printf("t=%s---\n",c);
if(strcmp(c,"0")!=0)
&nbs ......
栈主要用来存放局部变量, 传递参数, 存放函数的返回地址.esp 始终指向栈顶, 栈中的数据越多, esp的值越小.
堆用于存放动态分配的对象, 当你使用 malloc , new 等进行分配时,所得到的空间就在堆中. 动态分配得到的内存附带有分配信息, 所以你能够 realloc 和 free调它们.
全局,静态和常量是分配在数据区中的。数据区包括b ......
C/S 与 B/S
1.硬件环境不同:
C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.
B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行&n ......
位计数就是对一个数中具有某些特征的位进行计数。看下面实现:
/* bitscount.c:位计数 */
/* 计算x中1位的数目:方案1,采用分治策略 */
inline int pop(unsigned x){
/* 对每个2位字段,先析出其右端的1位,再析出其左端的1位,然后让这两个位相加 */
x=(x & 0x55555555)+((x>>1) & 0x555555 ......
位和字节的重排在密码学算法中有广泛的应用。
/* rearran.c:位和字节的重排 */
/* 位反转:以字的中心为对称点进行位反射
例如: abcd efgh ijkl mnop ABCD EFGH IJKL MNOP
位反转:PONM LKJI HGFE DCBA ponm lkji hgfe dcba */
unsigned rev(unsigned x){
/* 交换相邻的单个位 */
x=(x & 0x5 ......