当我读入一个文件然后输出到一个新文件时,输出是乱码,我试图找出原因.
我试图运行以下代码
#include<stdio.h>
#include<stdlib.h>
int main(int argc ,char *argv[])
{
int c;
FILE *of;
FILE *f;
of=fopen(argv[2],"w");
f=fopen(argv[1],"r");
while(c=getc(f)!=EOF)
putc(c,of);
fclose(of);
fclose(f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行它如下
$./a.out temp new
这里temp是一个已经存在的文件,其内容是:
this is a temp file和new运行程序之前不存在
但现在,当我把new它的内容搞砸了,为什么会这样呢?
我在C中寻找putc()函数的宏实现.
我在Ritchie和Kernighan的"C编程语言"中找到的一个实现
#define putc(x,p) (--(p)->cnt >=0 \
?(unsigned char) *(p)->ptr++ :_flushbuf((x),p))
Run Code Online (Sandbox Code Playgroud)
文件结构定义如下
typedef struct _iobuf {
int cnt;
char *ptr;
char *base;
int flag;
int fd;
}FILE;
Run Code Online (Sandbox Code Playgroud)
当我们调用putc时,我无法看到cnt是如何初始化的?